Compare commits

..

1 Commits

Author SHA1 Message Date
liangcheng d761be2e3e fix 7 days ago

@ -1,13 +0,0 @@
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{
}

@ -1,226 +0,0 @@
package com.engine.hrm.cmd.organization;
import com.api.hrm.util.ServiceUtil;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.biz.SimpleBizLogger;
import com.engine.common.constant.BizLogOperateAuditType;
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.hrm.cmd.matrix.biz.MatrixMaintComInfo;
import com.engine.hrm.entity.RuleCodeType;
import com.engine.hrm.util.CodeRuleManager;
import com.engine.hrm.util.HrmOrganizationUtil;
import com.engine.hrm.util.face.HrmFaceCheckManager;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.hrm.common.DbFunctionUtil;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.definedfield.HrmDeptFieldManagerE9;
import weaver.interfaces.email.CoreMailAPI;
import weaver.interfaces.hrm.HrmServiceManager;
import weaver.matrix.MatrixUtil;
import weaver.rtx.OrganisationCom;
import weaver.rtx.OrganisationComRunnable;
import weaver.systeminfo.SystemEnv;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AddDepartmentCmd extends AbstractCommonCommand<Map<String, Object>>{
private SimpleBizLogger logger;
public AddDepartmentCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
String departmentname = Util.fromScreen((String)params.get("departmentname"),user.getLanguage());
this.logger = new SimpleBizLogger();
BizLogContext bizLogContext = new BizLogContext();
bizLogContext.setLogType(BizLogType.HRM_ENGINE);//模块类型
bizLogContext.setBelongType(BizLogSmallType4Hrm.HRM_ENGINE_ORGANIZATION);
bizLogContext.setLogSmallType(BizLogSmallType4Hrm.HRM_ENGINE_ORGANIZATION_DPEARTMENT);//当前小类型
bizLogContext.setOperateAuditType(BizLogOperateAuditType.WARNING);//警告
bizLogContext.setParams(params);//当前request请求参数
logger.setUser(user);//当前操作人
String mainSql = "select * from HrmDepartment where 1=2 ";
logger.setMainSql(mainSql,"id");//主表sql
logger.setMainPrimarykey("id");//主日志表唯一key
logger.setMainTargetNameColumn("departmentname");//当前targetName对应的列对应日志中的对象名
logger.before(bizLogContext);
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
try {
if (!HrmUserVarify.checkUserRight("HrmDepartmentAdd:Add", user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
DepartmentComInfo DepartmentComInfo = new DepartmentComInfo();
//OrganisationCom OrganisationCom = new OrganisationCom();
HrmServiceManager HrmServiceManager = new HrmServiceManager();
String departmentmark = Util.fromScreen((String)params.get("departmentmark"),user.getLanguage());
String departmentname = Util.fromScreen((String)params.get("departmentname"),user.getLanguage());
String subcompanyid1 = Util.fromScreen((String)params.get("subcompanyid1"),user.getLanguage());
int supdepid = Util.getIntValue((String)params.get("supdepid"),0);
String showorder = Util.fromScreen(Util.null2s((String)params.get("showorder"),"0"),user.getLanguage());
if(Util.getIntValue(subcompanyid1,0)<=0){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382647, user.getLanguage()));
return retmap;
}
String allsupdepid = "0";
String departmentcode = Util.fromScreen((String)params.get("departmentcode"),user.getLanguage());
int coadjutant=Util.getIntValue((String)params.get("coadjutant"),0);
/*
* Added by Charoes Huang
* 10
*/
int supdepartmentid = supdepid;
if(supdepartmentid > 0){
Map<String, String> supMap = new HashMap<String, String>();
supMap.put(""+supdepid, "1");
int supdepidtemp = Util.getIntValue(DepartmentComInfo.getDepartmentsupdepid(""+supdepid), 0);
while(supdepidtemp>0){
if(supMap.get(""+supdepidtemp)==null){
supMap.put(""+supdepidtemp, "1");
supdepidtemp = Util.getIntValue(DepartmentComInfo.getDepartmentsupdepid(""+supdepidtemp), 0);
}else{
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382650,user.getLanguage()));
return retmap;
}
}
if(HrmOrganizationUtil.ifDeptLevelEquals10(supdepartmentid)){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382650, user.getLanguage()));
return retmap;
}
}
// 如果编码为空 自动生成编码
departmentcode = CodeRuleManager.getCodeRuleManager().generateRuleCode(RuleCodeType.DEPARTMENT, subcompanyid1, departmentcode,String.valueOf(supdepid));
if(!"".equals(departmentcode)){
String sql2="select id from hrmdepartment where departmentcode = '" + departmentcode + "' ";
rs.executeSql(sql2);
if(rs.next()){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382653, user.getLanguage()));
return retmap;
}
}
char separator = Util.getSeparator() ;
if(supdepid > 0){//当选择了上级部门的时候,需要更改当前部门的上级分部
subcompanyid1 = DepartmentComInfo.getSubcompanyid1(supdepid+"");
}
String para = departmentmark + separator + departmentname + separator +
supdepid+separator+allsupdepid+separator+subcompanyid1 + separator+ showorder+separator+coadjutant;
rs.executeProc("HrmDepartment_Insert",para);
int flag=rs.getFlag();
if(flag==2){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382655, user.getLanguage()));
return retmap;
}else if(flag==3){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382657, user.getLanguage()));
return retmap;
}
int id=0;
if(rs.next()){
id = rs.getInt(1);
}
weaver.hrm.company.OrgOperationUtil OrgOperationUtil = new weaver.hrm.company.OrgOperationUtil();
OrgOperationUtil.updateDepartmentLevel(""+id,"0");
String sql3="update hrmdepartment set departmentcode = '" + departmentcode + "' ";
sql3 += ","+ DbFunctionUtil.getInsertUpdateSetSql(rs.getDBType(),user.getUID()) ;
sql3+=" where id = "+id;
rs.executeSql(sql3);
HrmDeptFieldManagerE9 hrmDeptFieldManager = new HrmDeptFieldManagerE9(5);
hrmDeptFieldManager.editCustomData(params,id);
DepartmentComInfo.removeCompanyCache();
rs.executeSql("update orgchartstate set needupdate=1");
//add by wjy
//同步RTX端部门信息
//OrganisationCom.addDepartment(id);//执行速度过慢,改为另起线程执行
new Thread(new OrganisationComRunnable("department", "add", String.valueOf(id))).start();
//同步到CoreMail邮件系统开始
if(supdepid == 0) {
CoreMailAPI.synOrg(""+id, departmentname, "parent_org_unit_id=com_"+subcompanyid1+"&org_unit_name="+departmentname, "0");
//testapi.synOrg(""+id, departmentname, "com_"+subcompanyid1, "0");
} else {
CoreMailAPI.synOrg(""+id, departmentname, "parent_org_unit_id="+supdepid+"&org_unit_name="+departmentname, "0");
//testapi.synOrg(""+id, departmentname, ""+supdepid, "0");
}
//同步到CoreMail邮件系统结束
//OA与第三方接口单条数据同步方法开始
HrmServiceManager.SynInstantDepartment(""+id,"1");
//OA与第三方接口单条数据同步方法结束
HrmFaceCheckManager.sync(id+"",HrmFaceCheckManager.getOptInsert(),this.getClass().getName(),HrmFaceCheckManager.getOaDepartment());
//同步部门数据到矩阵
MatrixUtil.updateDepartmentData(""+id);
//同步矩阵维护范围
MatrixMaintComInfo maintComInfo = new MatrixMaintComInfo();
maintComInfo.removeCache();
//初始化应用分权
new weaver.hrm.appdetach.AppDetachComInfo().initSubDepAppData();
String mainSql = "select a.* from HrmDepartment a left join HrmDepartmentdefined b on a.id=b.deptid where a.id in(" + id + ")";
String tableColumns = new ServiceUtil().getTableColumns("select * from HrmDepartmentdefined", "b", "id");
if (!tableColumns.equals("")) {
mainSql = "select a.*," + tableColumns + " from HrmDepartment a left join HrmDepartmentdefined b on a.id=b.deptid where a.id in(" + id + ")";
}
logger.setMainSql(mainSql, "id");//主表sql
retmap.put("id", id);
retmap.put("status", "1");
retmap.put("message", SystemEnv.getHtmlLabelName(18758, user.getLanguage()));
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public List<BizLogContext> getLogContexts() {
return logger.getBizLogContexts();
}
}

@ -1,314 +0,0 @@
package com.engine.hrm.util;
import com.engine.hrm.entity.RuleCodeType;
import com.engine.xmgsecond.util.DepartmentNewCodeUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CodeRuleManager extends BaseBean {
private static CodeRuleManager codeRuleManager = new CodeRuleManager();
private SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
private DepartmentComInfo departmentComInfo = new DepartmentComInfo();
public static String NULL = "NULL";
public static String SEPARATOR = "-";
public static CodeRuleManager getCodeRuleManager() {
return codeRuleManager;
}
private CodeRuleManager() {
}
/**
*
* @param serialtype SUBCOMPANY("SUBCOMPANY"), DEPARTMENT("DEPARTMENT"), JOBTITLES("JOBTITLES"), USER("USER")
* @return
* @throws Exception
*/
public String generateRuleCode(RuleCodeType serialtype, String inputCode) throws Exception {
return this.generateRuleCode(serialtype, null, null, null, inputCode);
}
/**
*
* @param serialtype SUBCOMPANY("SUBCOMPANY"), DEPARTMENT("DEPARTMENT"), JOBTITLES("JOBTITLES"), USER("USER")
* @param subcompanyCode
* @return
* @throws Exception
*/
public String generateRuleCode(RuleCodeType serialtype, String subcompanyid, String inputCode,String supDeptid) throws Exception {
if (StringUtils.isNotEmpty(inputCode)) {
checkReservedIfDel(serialtype.getValue(), inputCode);
return inputCode;
}
RecordSet recordSet = new RecordSet();
// 查询启用的编码规则
String sql = "select * from hrm_coderule where serialtype = ? and serialenable = 1";
recordSet.executeQuery(sql, serialtype.getValue());
if (recordSet.getCounts() <=0) {
return "";
}
//QC3600738 新美光HR项目 部门自定义编码 新建(卡片 导入等)
if("DEPARTMENT".equals(serialtype.getValue())) {
DepartmentNewCodeUtil departmentCodeUtil = new DepartmentNewCodeUtil();
return departmentCodeUtil.generateRuleCode(subcompanyid,"",supDeptid);
}
return "";
}
/**
*
* @param serialtype SUBCOMPANY("SUBCOMPANY"), DEPARTMENT("DEPARTMENT"), JOBTITLES("JOBTITLES"), USER("USER")
* @param subcompanyid id
* @param deptid id
* @return
* @throws Exception
*/
public String generateRuleCode(RuleCodeType serialtype, String subcompanyid, String deptid, String jobtitlesid, String inputCode) throws Exception {
if (StringUtils.isNotEmpty(inputCode)) {
checkReservedIfDel(serialtype.getValue(), inputCode);
return inputCode;
}
RecordSet recordSet = new RecordSet();
// 查询启用的编码规则
String sql = "select * from hrm_coderule where serialtype = ? and serialenable = 1";
recordSet.executeQuery(sql, serialtype.getValue());
if (recordSet.getCounts() <=0) {
return "";
}
recordSet.next();
//QC3600738 新美光HR项目 部门自定义编码 重新生成编号
if("DEPARTMENT".equals(serialtype.getValue())) {
DepartmentNewCodeUtil departmentCodeUtil = new DepartmentNewCodeUtil();
return departmentCodeUtil.generateRuleCode(subcompanyid,deptid,"");
}
// 先匹配到规则的唯一编码
String oneselftype = recordSet.getString("oneselftype");
String id = recordSet.getString("id");
String[] oneselftypeList = StringUtils.isEmpty(oneselftype) ? new String[]{} : oneselftype.split(",");
Map<String, String> map = new HashMap<>();
LocalDate now = LocalDate.now();
for (String type : oneselftypeList) {
switch (RuleCodeType.getByValue(type)) {
case DAY:
map.put(RuleCodeType.DAY.getValue(), String.format("%02d", now.getDayOfMonth()));
case MONTH:
map.put(RuleCodeType.MONTH.getValue(), String.format("%02d", now.getMonthValue()));
case YEAR:
map.put(RuleCodeType.YEAR.getValue(), String.valueOf(now.getYear()));
break;
case SUBCOMPANY:
map.put("subcompanyid", subcompanyid);
break;
case DEPARTMENT:
map.put("deptid", deptid);
break;
case JOBTITLES:
map.put("jobtitlesid", jobtitlesid);
break;
}
}
String uniqueconstitute = map.isEmpty() ? CodeRuleManager.buildUniqueconstituteNULL() : CodeRuleManager.buildUniqueconstitute(map.get(RuleCodeType.YEAR.getValue()), map.get(RuleCodeType.MONTH.getValue()),
map.get(RuleCodeType.DAY.getValue()), map.get("subcompanyid"), map.get("deptid"), map.get("jobtitlesid"));
// int index = 0;
while (true) {
// index ++;
String code = this.buildCode(id, subcompanyid, deptid, jobtitlesid, uniqueconstitute);
sql = "select * from hrm_coderulereserved where reservedcode = ? and coderuleid = ?";
recordSet.executeQuery(sql, code, id);
if (recordSet.getCounts() <= 0 && !checkIsExist(code, serialtype.getValue())) {
return code;
}
}
// throw new Exception("自动创建编码失败!");
}
/**
*
* @param serialtype
* @param inputCode
*/
public void checkReservedIfDel(String serialtype, String inputCode) {
try {
RecordSet rs = new RecordSet();
String sql = "select hcr.id from hrm_coderulereserved hcr left join hrm_coderule hc ON hcr.coderuleid = hc.id where hc.serialtype = ? and reservedcode = ?";
rs.executeQuery(sql, serialtype, inputCode);
List<String> ids = new ArrayList<>();
while (rs.next()) {
ids.add(rs.getString("id"));
}
if (CollectionUtils.isNotEmpty(ids)) {
sql = "delete from hrm_coderulereserved where id in("+StringUtils.strip(ids.toString(),"[]")+")";
rs.executeUpdate(sql);
}
} catch (Exception e) {
writeLog(e);
}
}
private boolean checkIsExist(String code, String serialtype) {
RecordSet rs = new RecordSet();
String sql = "";
// 判断该字段是否已经被试用
switch (RuleCodeType.getByValue(serialtype)) {
case SUBCOMPANY:
sql = "select id from HrmSubCompany where subcompanycode = ?";
break;
case DEPARTMENT:
sql = "select id from HrmDepartment where departmentcode = ?";
break;
case JOBTITLES:
sql = "select id from HrmJobTitles where jobtitlecode = ?";
break;
case USER:
sql = "select id from hrmresource where workcode = ?";
break;
}
rs.executeQuery(sql, code);
if (rs.getCounts() > 0) {
return true;
}
return false;
}
private String buildCode(String id, String subcompanyid, String deptid,String jobtitlesid, String uniqueconstitute) throws Exception {
LocalDate localDate = LocalDate.now();
// 生成编号
RecordSet recordSet = new RecordSet();
String sql = "select * from hrm_coderuledetail where coderuleid = ? ORDER BY showorder";
StringBuilder sb = new StringBuilder();
recordSet.executeQuery(sql, id);
while (recordSet.next()) {
String ruletype = recordSet.getString("ruletype");
String rulevalue = Util.null2String(recordSet.getString("rulevalue")).trim();
switch (RuleCodeType.getByValue(ruletype)) {
case STRING:
sb.append(rulevalue);
break;
case YEAR:
sb.append(localDate.getYear());
break;
case MONTH:
sb.append(String.format("%02d", localDate.getMonthValue()));
break;
case DAY:
sb.append(String.format("%02d", localDate.getDayOfMonth()));
break;
case SUBCOMPANY:
sb.append(subCompanyComInfo.getSubCompanyCode(subcompanyid));
break;
case DEPARTMENT:
sb.append(departmentComInfo.getDepartmentCode(deptid));
break;
case JOBTITLES:
sb.append(getJobtitlesCode(jobtitlesid));
break;
case NUMBER:
int number = this.getNumber(id, 0, uniqueconstitute);
// if ((number+ "").length() > Integer.parseInt(rulevalue) - 1) {
// throw new Exception("流水号超出定义位数!");
// }
sb.append(String.format("%0"+rulevalue+"d", number));
break;
}
}
return sb.toString();
}
private String getJobtitlesCode(String jobtitlesid) {
RecordSet rs = new RecordSet();
String sql = "select jobtitlecode from hrmjobtitles where id = ?";
rs.executeQuery(sql, jobtitlesid);
while (rs.next()) {
return rs.getString("jobtitlecode");
}
return "";
}
/**
*
* @param id
*/
private int getNumber(String id, int index, String uniqueconstitute) throws Exception {
if (index == 5) {
throw new Exception("编号重复!");
}
RecordSet rs = new RecordSet();
String sql = "select * from hrm_coderulerecord where coderuleid = ? and uniqueconstitute = ?";
rs.executeQuery(sql, id, uniqueconstitute);
int currentnumber = -1;
int version = -1;
if (rs.next()) {
currentnumber = Integer.parseInt(rs.getString("currentnumber"));
version = Integer.parseInt(rs.getString("version"));
} else {
// 不存在 插入默认起始编号
sql = "insert into hrm_coderulerecord (coderuleid, uniqueconstitute, startnumber, currentnumber, version) values (? ,? ,? ,?, ?)";
if (rs.executeUpdate(sql, id, uniqueconstitute, 1, 1, 1)) {
currentnumber = 1;
version = 1;
}
}
sql = "update hrm_coderulerecord set version = ?, currentnumber = ? where coderuleid = ? and version = ? and uniqueconstitute = ?";
// 通过乐观锁的实现方式处理集群下的并发可能
rs.executeUpdate(sql, version + 1, currentnumber + 1, id, version, uniqueconstitute);
if (rs.next() && rs.getInt(0) <= 0) {
// 说明存在并发 未执行成功 重新获取
index ++;
return getNumber(id, index, uniqueconstitute);
}
return currentnumber;
}
/**
*
* @param id
* @param startnumber
*/
private void resetRuleCode(String id, String startnumber) {
RecordSet rs = new RecordSet();
String sql = "update hrm_coderule set resetdate = ?, currentnumber = ? where id = ?";
rs.executeUpdate(sql, LocalDate.now().toString(), startnumber, id);
}
/**
*
* @return
*/
public static String buildUniqueconstitute(String year, String month, String day, String subcompanyid, String deptid, String jobtitlesid) {
return Util.null2String(year, NULL) + SEPARATOR + Util.null2String(month, NULL) + SEPARATOR
+ Util.null2String(day, NULL) + SEPARATOR + Util.null2String(subcompanyid, NULL)
+ SEPARATOR + Util.null2String(deptid, NULL) + SEPARATOR + Util.null2String(jobtitlesid, NULL);
}
/**
*
* @return
*/
public static String buildUniqueconstituteNULL() {
return NULL + SEPARATOR + NULL + SEPARATOR
+ NULL + SEPARATOR + NULL
+ SEPARATOR + NULL + SEPARATOR + NULL;
}
}

@ -1,861 +0,0 @@
package com.engine.kq.biz;
import com.alibaba.fastjson.JSON;
import com.engine.kq.enums.FlowReportTypeEnum;
import com.engine.kq.enums.KqSplitFlowTypeEnum;
import com.engine.kq.wfset.bean.SplitBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
/**
*
*/
public class KQFlowDataBiz {
private String resourceid;
private String fromDate;
private String toDate;
private String fromTime;
private String toTime;
private String belongDate;
private String newLeaveType;
private String orderby_sql;
public KQFlowDataBiz(FlowDataParamBuilder build){
this.resourceid = build.resourceid;
this.fromDate = build.fromDate;
this.toDate = build.toDate;
this.fromTime = build.fromTime;
this.toTime = build.toTime;
this.belongDate = build.belongDate;
this.newLeaveType = build.newLeaveType;
this.orderby_sql = build.orderby_sql;
}
/**
*
*
* @param flowMaps
* @param isAll truefalse
* @return
*/
public List<SplitBean> getAllFlowData(Map<String,Object> flowMaps,boolean isAll){
List<SplitBean> allSplitBeans = new ArrayList<>();
Map<String,String> flowDeductCard = getFlowDeductCard();
allSplitBeans.addAll(getEvectionData(flowMaps,flowDeductCard));
allSplitBeans.addAll(getOutData(flowMaps,flowDeductCard));
allSplitBeans.addAll(getLeaveData(flowMaps,flowDeductCard));
if(isAll){
allSplitBeans.addAll(getOverTimeData(flowMaps));
}
allSplitBeans.addAll(getOtherData(flowMaps));
return allSplitBeans;
}
/**
*
*/
public Map<String,String> getFlowDeductCard() {
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
Map<String,String> flowDeductCard = new HashMap<>();
String flowDeductCardSql = "select * from kq_flow_deduct_card t where 1=1 and (isclear is null or isclear<>1) ";
String sqlWhere = sqlFlowCardParamWhere();
if(sqlWhere.length() > 0){
flowDeductCardSql += sqlWhere;
}
rs.execute(flowDeductCardSql);
while(rs.next()){
String requestId= rs.getString("requestId");
String resourceid= rs.getString("resourceid");
String signtype= rs.getString("signtype");
String serialnumber= rs.getString("serialnumber");
String flowtype= rs.getString("flowtype");
String key = requestId+"_"+resourceid+"_"+flowtype;
String serial_signtype = serialnumber+"_"+signtype;
if(flowDeductCard.containsKey(key)){
String tmpSignType = Util.null2String(flowDeductCard.get(key));
flowDeductCard.put(key, tmpSignType+","+serial_signtype);
}else{
flowDeductCard.put(key, serial_signtype);
}
}
return flowDeductCard;
}
/**
*
*/
public List<SplitBean> getLeaveData(Map<String, Object> flowMaps,
Map<String, String> flowDeductCard){
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
String tablename = "select * from "+KqSplitFlowTypeEnum.LEAVE.getTablename()+" where requestsyncid > 0 ";
// String tablename = "select a.* from "+KqSplitFlowTypeEnum.LEAVE.getTablename()+" a left join workflow_requestbase b on a.requestid = b.requestid where b.requestid > 0 ";
String sqlWhere = sqlParamWhere();
if(sqlWhere.length() > 0){
tablename += sqlWhere;
}
String leaveSql = "select * from ("+tablename+") t where 1=1 and (status is null or status <> '1') ";
if(sqlWhere.length() > 0){
leaveSql += sqlWhere;
}
List<SplitBean> splitBeans = new ArrayList<>();
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
int[] initArrays = kqTimesArrayComInfo.getInitArr();
rs.executeQuery(tablename);
new BaseBean().writeLog("==leaveSql=="+tablename);
while(rs.next()){
new BaseBean().writeLog("==zj1==");
SplitBean splitBean = new SplitBean();
String requestId= rs.getString("requestid");
String resourceid= rs.getString("resourceid");
String fromdate= rs.getString("fromdate");
String belongdate= rs.getString("belongdate");
String fromtime= rs.getString("fromtime");
String todate= rs.getString("todate");
String totime= rs.getString("totime");
String newleavetype= rs.getString("newleavetype");
String duration= rs.getString("duration");
String durationrule= rs.getString("durationrule");
String leavebackrequestid= Util.null2String(rs.getString("leavebackrequestid"));
new BaseBean().writeLog("==zj2==");
String fromtimedb= rs.getString("fromtimedb");
String totimedb= rs.getString("totimedb");
String repeatType = Util.null2String(rs.getString("repeat_type"));
String repeatLate = Util.null2String(rs.getString("repeat_late"));
String repeatEarly = Util.null2String(rs.getString("repeat_early"));
if(Util.getDoubleValue(duration) <= 0){
if(repeatType.length() > 0){
//哺乳假的不需要时长
}else{
// continue;
}
}
new BaseBean().writeLog("==zj3==");
//计算规则 1-按天请假 2-按半天请假 3-按小时请假 4-按整天请假
String unitType = "4".equalsIgnoreCase(durationrule)?"1":"2";
String card_key = requestId+"_"+resourceid+"_"+KqSplitFlowTypeEnum.LEAVE.getFlowtype();
String serial_signtype = "";
String serial = "";
String signtype = "";
if(!flowDeductCard.isEmpty() && flowDeductCard.containsKey(card_key)){
serial_signtype = Util.null2String(flowDeductCard.get(card_key));
if(serial_signtype.split("_") != null && serial_signtype.split("_").length == 2){
serial = serial_signtype.split("_")[0];
signtype = serial_signtype.split("_")[1];
}
}
new BaseBean().writeLog("==zj4==");
Map<String,String> infoMap = new HashMap<>();
infoMap.put("requestId", requestId);
infoMap.put(newleavetype, duration);
infoMap.put("begintime", fromtime);
infoMap.put("endtime", totime);
infoMap.put("unitType", unitType);
infoMap.put("durationrule", durationrule);
if("2".equals(durationrule) && Util.getDoubleValue(duration)<1){
infoMap.put("ishalf", "true");
}else{
infoMap.put("ishalf", "false");
}
infoMap.put("flowtype", FlowReportTypeEnum.LEAVE.getFlowType());
infoMap.put("newleavetype", newleavetype);
infoMap.put("signtype", signtype);
infoMap.put("serial", serial);
infoMap.put("fromtimedb", fromtimedb);
infoMap.put("totimedb", totimedb);
infoMap.put("repeatType", repeatType);
infoMap.put("repeatLate", repeatLate);
infoMap.put("repeatEarly", repeatEarly);
String key = resourceid+"|"+belongdate;
String keyRepeat = resourceid+"|"+belongdate+"|repeat";
new BaseBean().writeLog("==flowMaps=="+ JSON.toJSONString(flowMaps));
if(flowMaps != null){
if(flowMaps.get(key) != null){
if(leavebackrequestid.length() > 0 && leavebackrequestid.startsWith(",")){
initArrays = kqTimesArrayComInfo.getInitArr();
int fromTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(fromtime);
int toTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(totime);
Arrays.fill(initArrays, fromTimeIndex, toTimeIndex+1, 1);
leavebackrequestid = leavebackrequestid.substring(1);
String backSql = "select * from "+KqSplitFlowTypeEnum.LEAVEBACK.getTablename()+" where "+Util.getSubINClause(leavebackrequestid, "requestid", "in")+" and fromdate= '"+fromdate+"'";
rs1.executeQuery(backSql);
while (rs1.next()){
String back_fromtime = rs1.getString("fromtime");
String back_totime = rs1.getString("totime");
if(repeatType.length() > 0){
//如果是哺乳假似的重复校验,不需要考虑时间
back_fromtime = fromtime;
back_totime = totime;
}
String back_duration= rs.getString("duration");
if(Util.getDoubleValue(back_duration) <= 0){
// continue;
}
if(back_fromtime.equalsIgnoreCase(fromtime)){
Arrays.fill(initArrays, kqTimesArrayComInfo.getArrayindexByTimes(back_fromtime), kqTimesArrayComInfo.getArrayindexByTimes(back_totime)+1, -1);
}else{
Arrays.fill(initArrays, kqTimesArrayComInfo.getArrayindexByTimes(back_fromtime)+1, kqTimesArrayComInfo.getArrayindexByTimes(back_totime)+1, -1);
}
}
List<List<String>> backLists = new ArrayList<>();
List<String> backList = new ArrayList<>();
for(int i = fromTimeIndex ; i <= toTimeIndex ; i ++){
if(initArrays[i] == 1){
backList.add(kqTimesArrayComInfo.getTimesByArrayindex(i));
}else{
if(!backList.isEmpty()){
backLists.add(backList);
backList = new ArrayList<>();
}else{
continue;
}
}
}
if(!backList.isEmpty()){
backLists.add(backList);
}
if(backLists != null && !backLists.isEmpty()){
List<Map<String,String>> time_list_tmp = (List<Map<String,String>>)flowMaps.get(key);
for(int j = 0 ; j < backLists.size() ;j++){
List<String> backListTmp = backLists.get(j);
String back_tmp_fromtime = backListTmp.get(0);
String back_tmp_totime = backListTmp.get(backListTmp.size()-1);
infoMap = new HashMap<>();
infoMap.put("requestId", requestId);
infoMap.put(newleavetype, duration);
infoMap.put("begintime", back_tmp_fromtime);
infoMap.put("endtime", back_tmp_totime);
infoMap.put("unitType", unitType);
infoMap.put("durationrule", durationrule);
if("2".equals(durationrule)){
infoMap.put("ishalf", "true");
}
infoMap.put("flowtype", FlowReportTypeEnum.LEAVE.getFlowType());
infoMap.put("newleavetype", newleavetype);
infoMap.put("repeatType", repeatType);
infoMap.put("repeatLate", repeatLate);
infoMap.put("repeatEarly", repeatEarly);
time_list_tmp.add(infoMap);
}
if(repeatType.length() > 0) {
if (flowMaps.containsKey(keyRepeat)) {
List<Map<String,String>> time_list_tmp1 = (List<Map<String,String>>)flowMaps.get(keyRepeat);
time_list_tmp1.add(infoMap);
}
}
}
}else{
List<Map<String,String>> time_list_tmp = (List<Map<String,String>>)flowMaps.get(key);
time_list_tmp.add(infoMap);
}
}else{
if(leavebackrequestid.length() > 0 && leavebackrequestid.startsWith(",")){
initArrays = kqTimesArrayComInfo.getInitArr();
int fromTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(fromtime);
int toTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(totime);
Arrays.fill(initArrays, fromTimeIndex, toTimeIndex+1, 1);
leavebackrequestid = leavebackrequestid.substring(1);
String backSql = "select * from "+KqSplitFlowTypeEnum.LEAVEBACK.getTablename()+" where "+Util.getSubINClause(leavebackrequestid, "requestid", "in")+" and fromdate= '"+fromdate+"'";
rs1.executeQuery(backSql);
while (rs1.next()){
String back_fromtime = rs1.getString("fromtime");
String back_totime = rs1.getString("totime");
if(repeatType.length() > 0){
//如果是哺乳假似的重复校验,不需要考虑时间
back_fromtime = fromtime;
back_totime = totime;
}
if(back_fromtime.equalsIgnoreCase(fromtime)){
Arrays.fill(initArrays, kqTimesArrayComInfo.getArrayindexByTimes(back_fromtime), kqTimesArrayComInfo.getArrayindexByTimes(back_totime)+1, -1);
}else{
if(back_fromtime.compareTo(back_totime) < 0){
Arrays.fill(initArrays, kqTimesArrayComInfo.getArrayindexByTimes(back_fromtime)+1, kqTimesArrayComInfo.getArrayindexByTimes(back_totime)+1, -1);
}
}
}
List<List<String>> backLists = new ArrayList<>();
List<String> backList = new ArrayList<>();
for(int i = fromTimeIndex ; i <= toTimeIndex ; i ++){
if(initArrays[i] == 1){
backList.add(kqTimesArrayComInfo.getTimesByArrayindex(i));
}else{
if(!backList.isEmpty()){
backLists.add(backList);
backList = new ArrayList<>();
}else{
continue;
}
}
}
if(!backList.isEmpty()){
backLists.add(backList);
}
if(backLists != null && !backLists.isEmpty()){
List<Map<String,String>> time_list = new ArrayList<>();
for(int j = 0 ; j < backLists.size() ;j++){
List<String> backListTmp = backLists.get(j);
String back_tmp_fromtime = backListTmp.get(0);
String back_tmp_totime = backListTmp.get(backListTmp.size()-1);
infoMap = new HashMap<>();
infoMap.put("requestId", requestId);
infoMap.put(newleavetype, duration);
infoMap.put("begintime", back_tmp_fromtime);
infoMap.put("endtime", back_tmp_totime);
infoMap.put("unitType", unitType);
infoMap.put("durationrule", durationrule);
if("2".equals(durationrule)){
infoMap.put("ishalf", "true");
}
infoMap.put("flowtype", FlowReportTypeEnum.LEAVE.getFlowType());
infoMap.put("newleavetype", newleavetype);
infoMap.put("repeatType", repeatType);
infoMap.put("repeatLate", repeatLate);
infoMap.put("repeatEarly", repeatEarly);
time_list.add(infoMap);
}
flowMaps.put(key, time_list);
if(repeatType.length() > 0){
//单独存一份哺乳假的重复校验
flowMaps.put(keyRepeat, time_list);
}
}
}else{
new BaseBean().writeLog("==infoMap=="+JSON.toJSONString(infoMap));
List<Map<String,String>> time_list = new ArrayList<>();
time_list.add(infoMap);
flowMaps.put(key, time_list);
if(repeatType.length() > 0){
//单独存一份哺乳假的重复校验
flowMaps.put(keyRepeat, time_list);
}
}
}
}
}
return splitBeans;
}
/**
*
*/
public List<SplitBean> getEvectionData(Map<String, Object> flowMaps,
Map<String, String> flowDeductCard){
RecordSet rs = new RecordSet();
String tablename = "select a.* from "+KqSplitFlowTypeEnum.EVECTION.getTablename()+" a left join workflow_requestbase b on a.requestid = b.requestid where b.requestid > 0 ";
String sqlWhere = sqlParamWhere();
if(sqlWhere.length() > 0){
tablename += sqlWhere;
}
String leaveSql = "select * from ("+tablename+") t where 1=1 and (status is null or status <> '1') ";
if(sqlWhere.length() > 0){
leaveSql += sqlWhere;
}
List<SplitBean> splitBeans = new ArrayList<>();
rs.execute(leaveSql);
while(rs.next()){
SplitBean splitBean = new SplitBean();
String requestId= rs.getString("requestId");
String resourceid= rs.getString("resourceid");
String fromdate= rs.getString("fromdate");
String belongdate= rs.getString("belongdate");
String fromtime= rs.getString("fromtime");
String todate= rs.getString("todate");
String totime= rs.getString("totime");
String newleavetype= rs.getString("newleavetype");
String duration= rs.getString("duration");
String durationrule= rs.getString("durationrule");
splitBean.setRequestId(requestId);
splitBean.setResourceId(resourceid);
splitBean.setFromDate(fromdate);
splitBean.setFromTime(fromtime);
splitBean.setToDate(todate);
splitBean.setToTime(totime);
splitBean.setNewLeaveType(newleavetype);
splitBean.setDuration(duration);
splitBean.setDurationrule(durationrule);
splitBeans.add(splitBean);
if(Util.getDoubleValue(duration) <= 0){
// continue;
}
//计算规则 1-按天请假 2-按半天请假 3-按小时请假 4-按整天请假
String unitType = "4".equalsIgnoreCase(durationrule)?"1":"2";
String card_key = requestId+"_"+resourceid+"_"+KqSplitFlowTypeEnum.EVECTION.getFlowtype();
String serial_signtype = "";
String serial = "";
String signtype = "";
if(!flowDeductCard.isEmpty() && flowDeductCard.containsKey(card_key)){
serial_signtype = Util.null2String(flowDeductCard.get(card_key));
if(serial_signtype.split("_") != null && serial_signtype.split("_").length == 2){
serial = serial_signtype.split("_")[0];
signtype = serial_signtype.split("_")[1];
}
}
Map<String,String> infoMap = new HashMap<>();
infoMap.put(FlowReportTypeEnum.businessLeave.getFlowType(), duration);
infoMap.put("requestId", requestId);
infoMap.put("begintime", fromtime);
infoMap.put("endtime", totime);
infoMap.put("unitType", unitType);
infoMap.put("durationrule", durationrule);
if("2".equals(durationrule) && Util.getDoubleValue(duration)<1){
infoMap.put("ishalf", "true");
}else{
infoMap.put("ishalf", "false");
}
infoMap.put("duration", duration);
infoMap.put("flowtype", FlowReportTypeEnum.EVECTION.getFlowType());
infoMap.put("signtype", signtype);
infoMap.put("serial", serial);
String key = resourceid+"|"+belongdate;
if(flowMaps != null){
if(flowMaps.get(key) != null){
List<Map<String,String>> time_list_tmp = (List<Map<String,String>>)flowMaps.get(key);
time_list_tmp.add(infoMap);
}else{
List<Map<String,String>> time_list = new ArrayList<>();
time_list.add(infoMap);
flowMaps.put(key, time_list);
}
}
}
return splitBeans;
}
/**
*
*/
public List<SplitBean> getOutData(Map<String, Object> flowMaps,
Map<String, String> flowDeductCard){
RecordSet rs = new RecordSet();
String tablename = "select a.* from "+KqSplitFlowTypeEnum.OUT.getTablename()+" a left join workflow_requestbase b on a.requestid = b.requestid where b.requestid > 0 ";
String sqlWhere = sqlParamWhere();
if(sqlWhere.length() > 0){
tablename += sqlWhere;
}
String leaveSql = "select * from ("+tablename+") t where 1=1 and (status is null or status <> '1') ";
if(sqlWhere.length() > 0){
leaveSql += sqlWhere;
}
List<SplitBean> splitBeans = new ArrayList<>();
rs.execute(leaveSql);
while(rs.next()){
SplitBean splitBean = new SplitBean();
String requestId= rs.getString("requestId");
String resourceid= rs.getString("resourceid");
String fromdate= rs.getString("fromdate");
String belongdate= rs.getString("belongdate");
String fromtime= rs.getString("fromtime");
String todate= rs.getString("todate");
String totime= rs.getString("totime");
String newleavetype= rs.getString("newleavetype");
String duration= rs.getString("duration");
String durationrule= rs.getString("durationrule");
splitBean.setRequestId(requestId);
splitBean.setResourceId(resourceid);
splitBean.setFromDate(fromdate);
splitBean.setFromTime(fromtime);
splitBean.setToDate(todate);
splitBean.setToTime(totime);
splitBean.setNewLeaveType(newleavetype);
splitBean.setDuration(duration);
splitBean.setDurationrule(durationrule);
splitBeans.add(splitBean);
if(Util.getDoubleValue(duration) <= 0){
// continue;
}
//计算规则 1-按天请假 2-按半天请假 3-按小时请假 4-按整天请假
String unitType = "4".equalsIgnoreCase(durationrule)?"1":"2";
String card_key = requestId+"_"+resourceid+"_"+KqSplitFlowTypeEnum.OUT.getFlowtype();
String serial_signtype = "";
String serial = "";
String signtype = "";
if(!flowDeductCard.isEmpty() && flowDeductCard.containsKey(card_key)){
serial_signtype = Util.null2String(flowDeductCard.get(card_key));
if(serial_signtype.split("_") != null && serial_signtype.split("_").length == 2){
serial = serial_signtype.split("_")[0];
signtype = serial_signtype.split("_")[1];
}
}
Map<String,String> infoMap = new HashMap<>();
infoMap.put(FlowReportTypeEnum.officialBusiness.getFlowType(), duration);
infoMap.put("requestId", requestId);
infoMap.put("begintime", fromtime);
infoMap.put("endtime", totime);
infoMap.put("unitType", unitType);
infoMap.put("durationrule", durationrule);
if("2".equals(durationrule) && Util.getDoubleValue(duration)<1){
infoMap.put("ishalf", "true");
}else{
infoMap.put("ishalf", "false");
}
infoMap.put("duration", duration);
infoMap.put("flowtype", FlowReportTypeEnum.OUT.getFlowType());
infoMap.put("signtype", signtype);
infoMap.put("serial", serial);
String key = resourceid+"|"+belongdate;
if(flowMaps != null){
if(flowMaps.get(key) != null){
List<Map<String,String>> time_list_tmp = (List<Map<String,String>>)flowMaps.get(key);
time_list_tmp.add(infoMap);
}else{
List<Map<String,String>> time_list = new ArrayList<>();
time_list.add(infoMap);
flowMaps.put(key, time_list);
}
}
}
return splitBeans;
}
/**
*
*/
public List<SplitBean> getOverTimeData(Map<String,Object> flowMaps){
RecordSet rs = new RecordSet();
String tablename = "select a.* from "+KqSplitFlowTypeEnum.OVERTIME.getTablename()+" a left join workflow_requestbase b on a.requestid = b.requestid where b.requestid > 0 ";
String sqlWhere = sqlParamWhere();
if(sqlWhere.length() > 0){
tablename += sqlWhere;
}
String leaveSql = "select * from ("+tablename+") t where 1=1 ";
if(sqlWhere.length() > 0){
leaveSql += sqlWhere;
}
List<SplitBean> splitBeans = new ArrayList<>();
if(orderby_sql.length() > 0){
leaveSql = leaveSql+orderby_sql;
}
rs.execute(leaveSql);
while(rs.next()){
SplitBean splitBean = new SplitBean();
String dataid= rs.getString("dataid");
String detailid= rs.getString("detailid");
String requestId= rs.getString("requestId");
String resourceid= rs.getString("resourceid");
String fromdate= rs.getString("fromdate");
String belongdate= rs.getString("belongdate");
String fromtime= rs.getString("fromtime");
String todate= rs.getString("todate");
String totime= rs.getString("totime");
String newleavetype= rs.getString("newleavetype");
String duration= rs.getString("duration");
String durationrule= rs.getString("durationrule");
String changetype= rs.getString("changetype");
String d_mins= rs.getString("d_mins");
String overtime_type= rs.getString("overtime_type");
String fromdatedb= rs.getString("fromdatedb");
String fromtimedb= rs.getString("fromtimedb");
String todatedb= rs.getString("todatedb");
String totimedb= rs.getString("totimedb");
splitBean.setDataId(dataid);
splitBean.setDetailId(detailid);
splitBean.setRequestId(requestId);
splitBean.setResourceId(resourceid);
splitBean.setFromDate(fromdate);
splitBean.setFromTime(fromtime);
splitBean.setToDate(todate);
splitBean.setToTime(totime);
splitBean.setNewLeaveType(newleavetype);
splitBean.setDuration(duration);
splitBean.setDurationrule(durationrule);
splitBean.setChangeType(Util.getIntValue(changetype));
splitBean.setD_Mins(Util.getDoubleValue(d_mins));
splitBean.setOvertime_type(overtime_type);
splitBean.setFromdatedb(fromdatedb);
splitBean.setFromtimedb(fromtimedb);
splitBean.setTodatedb(todatedb);
splitBean.setTotimedb(totimedb);
splitBeans.add(splitBean);
//计算规则 1-按天请假 2-按半天请假 3-按小时请假 4-按整天请假
String unitType = "4".equalsIgnoreCase(durationrule)?"1":"2";
unitType = "2".equalsIgnoreCase(durationrule)?"1":"2";
Map<String,String> infoMap = new HashMap<>();
infoMap.put(FlowReportTypeEnum.businessLeave.getFlowType(), duration);
infoMap.put("begintime", fromtime);
infoMap.put("endtime", totime);
infoMap.put("unitType", unitType);
infoMap.put("duration", duration);
infoMap.put("flowtype", FlowReportTypeEnum.OVERTIME.getFlowType());
String key = resourceid+"|"+belongdate;
if(flowMaps != null){
if(flowMaps.get(key) != null){
List<Map<String,String>> time_list_tmp = (List<Map<String,String>>)flowMaps.get(key);
time_list_tmp.add(infoMap);
}else{
List<Map<String,String>> time_list = new ArrayList<>();
time_list.add(infoMap);
flowMaps.put(key, time_list);
}
}
}
return splitBeans;
}
/**
*
*/
public List<SplitBean> getOtherData(Map<String,Object> flowMaps){
RecordSet rs = new RecordSet();
String tablename = "select a.* from "+KqSplitFlowTypeEnum.OTHER.getTablename()+" a left join workflow_requestbase b on a.requestid = b.requestid where b.requestid > 0 ";
String sqlWhere = sqlParamWhere();
if(sqlWhere.length() > 0){
tablename += sqlWhere;
}
String leaveSql = "select * from ("+tablename+") t where 1=1 ";
if(sqlWhere.length() > 0){
leaveSql += sqlWhere;
}
List<SplitBean> splitBeans = new ArrayList<>();
rs.execute(leaveSql);
while(rs.next()){
SplitBean splitBean = new SplitBean();
String requestId= rs.getString("requestId");
String resourceid= rs.getString("resourceid");
String fromdate= rs.getString("fromdate");
String belongdate= rs.getString("belongdate");
String fromtime= rs.getString("fromtime");
String todate= rs.getString("todate");
String totime= rs.getString("totime");
String newleavetype= rs.getString("newleavetype");
String duration= rs.getString("duration");
String durationrule= rs.getString("durationrule");
splitBean.setRequestId(requestId);
splitBean.setResourceId(resourceid);
splitBean.setFromDate(fromdate);
splitBean.setFromTime(fromtime);
splitBean.setToDate(todate);
splitBean.setToTime(totime);
splitBean.setNewLeaveType(newleavetype);
splitBean.setDuration(duration);
splitBean.setDurationrule(durationrule);
splitBeans.add(splitBean);
//计算规则 1-按天请假 2-按半天请假 3-按小时请假 4-按整天请假
String unitType = "4".equalsIgnoreCase(durationrule)?"1":"2";
Map<String,String> infoMap = new HashMap<>();
infoMap.put(FlowReportTypeEnum.businessLeave.getFlowType(), duration);
infoMap.put("begintime", fromtime);
infoMap.put("endtime", totime);
infoMap.put("unitType", unitType);
String key = resourceid+"|"+belongdate;
if(flowMaps != null){
if(flowMaps.get(key) != null){
List<Map<String,String>> time_list_tmp = (List<Map<String,String>>)flowMaps.get(key);
time_list_tmp.add(infoMap);
}else{
List<Map<String,String>> time_list = new ArrayList<>();
time_list.add(infoMap);
flowMaps.put(key, time_list);
}
}
}
return splitBeans;
}
/**
*
* @param ruleid
* @return true
*/
public static boolean leaveTypeUsed(String ruleid){
KQFlowDataBiz kqFlowDataBiz = new FlowDataParamBuilder().newLeaveTypeParam(ruleid).build();
List<SplitBean> splitBeans = kqFlowDataBiz.getLeaveData(null, new HashMap<>());
if(!splitBeans.isEmpty()){
return true;
}else{
return false;
}
}
/**
*
* @return
*/
private String sqlParamWhere() {
String sqlWhere = "";
if(resourceid.length() > 0){
sqlWhere += " and resourceid in ( "+resourceid+" )";
}
if(fromDate.length() > 0 && toDate.length() > 0){
sqlWhere += " and ( fromdate between '"+fromDate+"' and '"+toDate+"' or todate between '"+fromDate+"' and '"+toDate+"' )";
}else{
if(fromDate.length() > 0){
sqlWhere += " and fromdate between '"+fromDate+"' and '"+fromDate+"' ";
}
if(toDate.length() > 0){
sqlWhere += " and todate between '"+toDate+"' and '"+toDate+"' ";
}
}
if(belongDate.length() > 0){
sqlWhere += " and belongdate = '"+belongDate+"' ";
}
if(fromTime.length() > 0){
sqlWhere += " and fromtime >= '"+fromTime+"' ";
}
if(toTime.length() > 0){
sqlWhere += " and totime <= '"+toTime+"' ";
}
if(newLeaveType.length() > 0){
sqlWhere += " and newleavetype in ( "+newLeaveType+" )";
}
return sqlWhere;
}
private String sqlFlowCardParamWhere() {
String sqlWhere = "";
if(resourceid.length() > 0){
sqlWhere += " and resourceid in ( "+resourceid+" )";
}
if(fromDate.length() > 0 && toDate.length() > 0){
sqlWhere += " and ( fromdate between '"+fromDate+"' and '"+toDate+"' or todate between '"+fromDate+"' and '"+toDate+"' )";
}else{
if(fromDate.length() > 0){
sqlWhere += " and fromdate between '"+fromDate+"' and '"+fromDate+"' ";
}
if(toDate.length() > 0){
sqlWhere += " and todate between '"+toDate+"' and '"+toDate+"' ";
}
}
if(belongDate.length() > 0){
sqlWhere += " and belongdate = '"+belongDate+"' ";
}
if(fromTime.length() > 0){
sqlWhere += " and fromtime >= '"+fromTime+"' ";
}
if(toTime.length() > 0){
sqlWhere += " and totime <= '"+toTime+"' ";
}
return sqlWhere;
}
/**
* Builder
*/
public static class FlowDataParamBuilder {
private String resourceid = "";
private String fromDate = "";
private String toDate = "";
private String fromTime = "";
private String toTime = "";
private String belongDate = "";
/**
*
*/
private String newLeaveType = "";
private String orderby_sql = "";
public FlowDataParamBuilder() {
this.resourceid = "";
//初始化的时候需要把其他参数先清空下
this.fromDate = "";
this.toDate = "";
this.fromTime = "";
this.toTime = "";
this.newLeaveType = "";
this.belongDate = "";
this.orderby_sql = "";
}
//成员方法返回其自身,所以可以链式调用
public FlowDataParamBuilder resourceidParam(final String resourceid) {
this.resourceid = resourceid;
return this;
}
public FlowDataParamBuilder fromDateParam(final String fromDate) {
this.fromDate = fromDate;
return this;
}
public FlowDataParamBuilder toDateParam(final String toDate) {
this.toDate = toDate;
return this;
}
public FlowDataParamBuilder fromTimeParam(final String fromTime) {
this.fromTime = fromTime;
return this;
}
public FlowDataParamBuilder toTimeParam(final String toTime) {
this.toTime = toTime;
return this;
}
public FlowDataParamBuilder newLeaveTypeParam(final String newLeaveType) {
this.newLeaveType = newLeaveType;
return this;
}
public FlowDataParamBuilder belongDateParam(final String belongDate) {
this.belongDate = belongDate;
return this;
}
public FlowDataParamBuilder orderby_sqlParam(final String orderby_sql) {
this.orderby_sql = orderby_sql;
return this;
}
//Builder的build方法返回外部类的实例
public KQFlowDataBiz build() {
return new KQFlowDataBiz(this);
}
}
}

File diff suppressed because it is too large Load Diff

@ -1,499 +0,0 @@
package com.engine.kq.biz;
import com.engine.integration.util.MyX509TrustManager;
import com.engine.kq.log.KQLog;
import net.sf.json.JSONObject;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.file.Prop;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.systeminfo.SystemEnv;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.*;
/**
*
*/
public class KQHolidaySetBiz {
private static KQLog logger = new KQLog();
/**
* ID
*
* @param resourceId ID
* @param year
* @param month
* @return
*/
public static List getGroupHolidaySetList(String groupId, String year, String month) {
List<Map<String, Object>> valueList = new ArrayList<Map<String, Object>>();
Map<String, Object> valueMap = new HashMap<String, Object>();
/*指定年月*/
String startDate = year;
String endDate = month;
if (month.length() == 0) {
startDate = year + "-01" + "-01";
endDate = year + "-12" + "-31";
} else if (month.length() == 1) {
startDate = year + "-0" + month + "-01";
endDate = year + "-0" + month + "-31";
} else if (month.length() == 2) {
startDate = year + "-" + month + "-01";
endDate = year + "-" + month + "-31";
}
RecordSet recordSet = new RecordSet();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
KQHolidaySetComInfo holidaySetComInfo = new KQHolidaySetComInfo();
boolean isEnd = false;
for (String date = startDate; !isEnd; ) {
if (date.compareTo(endDate) >= 0) {
isEnd = true;
}
String changeType = holidaySetComInfo.getChangeType(groupId, date);
String holidayDesc = holidaySetComInfo.getHolidayDesc(groupId, date);
if (!changeType.equals("")) {
valueMap = new HashMap<String, Object>();
valueMap.put("date", date);
valueMap.put("name", holidayDesc);
valueMap.put("type", changeType);
valueList.add(valueMap);
}
date = DateUtil.getDate(date, 1);
}
return valueList;
}
/**
* ID
*
* @param resourceId ID
* @param year
* @param month
* @return
*/
public static List getKQHolidaySetList(String resourceId, String year, String month) {
List<Map<String, Object>> valueList = new ArrayList<Map<String, Object>>();
/*指定年月*/
String startDate = year;
String endDate = month;
if (month.length() == 0) {
startDate = year + "-01" + "-01";
endDate = year + "-12" + "-31";
} else if (month.length() == 1) {
startDate = year + "-0" + month + "-01";
endDate = year + "-0" + month + "-31";
} else if (month.length() == 2) {
startDate = year + "-" + month + "-01";
endDate = year + "-" + month + "-31";
}
valueList = getHolidaySetListByScope(resourceId, startDate, endDate);
return valueList;
}
/**
*
*
* @param resourceId ID
* @param startDate
* @param endDate
* @return
*/
public static List getHolidaySetListByScope(String resourceId, String startDate, String endDate) {
Map<String, Object> valueMap = new HashMap<String, Object>();
List<Map<String, Object>> valueList = new ArrayList<Map<String, Object>>();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
KQHolidaySetComInfo holidaySetComInfo = new KQHolidaySetComInfo();
boolean isEnd = false;
for (String date = startDate; !isEnd; ) {
if (date.compareTo(endDate) >= 0) {
isEnd = true;
}
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
String changeType = holidaySetComInfo.getChangeType(groupId, date);
String holidayDesc = holidaySetComInfo.getHolidayDesc(groupId, date);
if (!changeType.equals("")&&!getWorkDay(resourceId, date)) {
valueMap = new HashMap<String, Object>();
valueMap.put("date", date);
valueMap.put("name", holidayDesc);
valueMap.put("type", changeType);
valueList.add(valueMap);
}
date = DateUtil.getDate(date, 1);
}
return valueList;
}
/**
* +
*
* @param resourceId ID
* @param date
* @return true-false
*/
public static boolean isHoliday(String resourceId, String date) {
return isHoliday(resourceId, date, false);
}
/**
* ++
*
* @param resourceId ID
* @param date
* @param containWeekend truefalse
* @return true-false
*/
public static boolean isHoliday(String resourceId, String date, boolean containWeekend) {
boolean flag = false;
if(getWorkDay(resourceId, date)){
return flag;
}
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
int changeType = getChangeType(groupId, date);
/*如果需要包含周末,判断传入的日期是不是周末*/
if (containWeekend && changeType != 2 && (DateUtil.getWeek(date) == 6 || DateUtil.getWeek(date) == 7)) {
flag = true;
}
if (changeType == 1 || changeType == 3) {
flag = true;
}
return flag;
}
/**
* ++
*
* @param resourceId ID
* @param date
* @return true-false
*/
public static boolean isDouble(String resourceId, String date) {
boolean flag = false;
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
int changeType = getChangeType(groupId, date);
if (changeType == 1 || changeType == 3) {
flag = true;
}
return flag;
}
/**
* ()
*
* @param resourceId ID
* @param date
* @return
*/
public static boolean getWorkDay(String resourceId, String date) {
boolean flag = false;
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String holiday_is_priority = Util.null2String(kqSettingsComInfo.getMain_val("holiday_is_priority"),"0");
if("0".equals(holiday_is_priority)) {
return flag;
}
/*排班制不支持调配节假日数据*/
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
String KQType = kqGroupComInfo.getKqtype(groupId);//考勤类型1-固定班制、2-排班制、3-自由班制
if (KQType.equals("2")) {
flag = true;
}
return flag;
}
/**
* ()
*
* @param groupId ID
* @param date
* @return 1-2-3--1-
*/
public static int getChangeType(String groupId, String date) {
int changeType = -1;//默认没有设置过节假日(节假日设置的类型1-公众假日、2-调配工作日、3-调配休息日)
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
String tmpChangetype = kqHolidaySetComInfo.getChangeType(groupId, date);
if(null != tmpChangetype){
changeType = Util.getIntValue(tmpChangetype, -1);
}
return changeType;
}
/**
* ()
*
* @param resourceId ID
* @param date
* @return
*/
public static int getRelatedDay(String resourceId, String date) {
int relatedDay = -1;
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceId, date);
/*排班制不支持调配节假日数据*/
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
String KQType = kqGroupComInfo.getKqtype(groupId);//考勤类型1-固定班制、2-排班制、3-自由班制
if (KQType.equals("2")) {
return relatedDay;
}
/*只有当调配工作日时才有对应工作日*/
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
int changeType = Util.getIntValue(kqHolidaySetComInfo.getChangeType(groupId, date), -1);
if (changeType == 2) {
relatedDay = Util.getIntValue(kqHolidaySetComInfo.getRelatedDay(groupId, date), 0);
}
return relatedDay;
}
/**
* ()
*
* @param groupIds ID(ID,)
* @param year
* @return
*/
public static Map<String, Object> initHolidaySet(String groupIds, String year, User user) {
Map<String, Object> resultMap = new HashMap<String, Object>();
List<String> errInfoList = new ArrayList<String>();//错误信息集合
/**
* API(JSON)(APIAPI)
* status1-0-
* sketch''
* holidayList[{holidayDate:'',changeType:'',holidayDesc:''},,{holidayDate:'',changeType:'',holidayDesc:''}]
*/
String url = Prop.getInstance().getPropValue("kq_settings", "KQHolidaySetUrl");
Map<String, Object> tempMap = httpRequest(url +"?year="+year+"&key="+Util.getEncrypt(Util.getRandom()), user);
if ("0".equals((String) tempMap.get("status"))) {
resultMap.put("status", "0");
resultMap.put("sketch", (String) tempMap.get("sketch"));
return resultMap;
}
List<String> holidayDateList = new ArrayList<String>();
try {
List<String> groupIdList = Util.TokenizerString(groupIds, ",");//考勤组ID集合
for (int i = 0; i < groupIdList.size(); i++) {
String groupId = groupIdList.get(i);
/**
*
*/
List<String> dateList = new ArrayList<String>();
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
kqHolidaySetComInfo.setTofirstRow();
while (kqHolidaySetComInfo.next()) {
if (kqHolidaySetComInfo.getGroupId().equals(groupId)) {
dateList.add(kqHolidaySetComInfo.getHolidayDate());
}
}
/**
* ~
*/
int relatedDay = 0;
for (int x = 0; x < 7; x++) {
KQFixedSchedulceComInfo kqFixedSchedulceComInfo = new KQFixedSchedulceComInfo();
String serialId = Util.null2String(kqFixedSchedulceComInfo.getSerialid(groupId, x));
if (!serialId.equals("")) {
relatedDay = x;
break;
}
}
/**
* ()
*/
boolean flag = true;
RecordSet recordSet = new RecordSet();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
List<Map<String, Object>> holidayList = (List<Map<String, Object>>) tempMap.get("holidayList");
Map<String, Object> holidayMap = new HashMap<String, Object>();
if(holidayList.size()>0){
String tmpsql = "delete from kq_HolidaySet where groupId='"+groupId+"' and holidayDate>='"+year+"-01-01' and holidayDate<='"+year+"-12-31' ";
recordSet.executeUpdate(tmpsql);
}
for (int j = 0; j < holidayList.size(); j++) {
holidayMap = holidayList.get(j);
String holidayDate = year + "-" + (String) holidayMap.get("holidayDate");
if (!holidayDateList.contains(holidayDate)) {
holidayDateList.add(holidayDate);
}
int changeType = (int) holidayMap.get("changeType");
if (kqGroupComInfo.getKqtype(groupId).equals("2")&&changeType == 2 ) {
//排班制的考勤组不能初始化调配工作日
continue;
}
String holidayDesc = (String) holidayMap.get("holidayDesc");
if (dateList.contains(holidayDate)) {
String deleteSql = "delete from kq_HolidaySet where groupId=? and holidayDate=?";
recordSet.executeUpdate(deleteSql, groupId, holidayDate);
}
String sql = "insert into kq_HolidaySet(groupId,holidayDate,changeType,holidayDesc,relatedDay) values(?,?,?,?,?)";
flag = recordSet.executeUpdate(sql, groupId, holidayDate, changeType, holidayDesc, relatedDay);
if (!flag) {
errInfoList.add(SystemEnv.getHtmlLabelName(5056701, user.getLanguage()).replace("$groupName$", kqGroupComInfo.getGroupname(groupId)).replace("$holidayDate$", holidayDate));
}
}
}
/**
*
*/
if (errInfoList.size() > 0) {
resultMap.put("status", "0");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(125960, user.getLanguage()));
resultMap.put("description", errInfoList);
} else {
resultMap.put("status", "1");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(20196, user.getLanguage()));
}
} catch (Exception e) {
resultMap.put("status", "0");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
resultMap.put("desscription", errInfoList);
} finally {
/*刷新缓存*/
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
kqHolidaySetComInfo.removeCache();
/*刷新考勤报表*/
logger.info("初始化节假日数据格式化考勤报表。groupIdList=" + com.alibaba.fastjson.JSONObject.toJSONString(groupIds) +
"。holidayDateList=" + com.alibaba.fastjson.JSONObject.toJSONString(holidayDateList));
List<String> groupIdList = Util.TokenizerString(groupIds, ",");//考勤组ID集合
new KQHolidaySetThread(groupIdList,holidayDateList).start();
}
return resultMap;
}
/**
* API
*
* @param requestUrl
* @return
*/
private static Map<String, Object> httpRequest(String requestUrl, User user) {
Map<String, Object> resultMap = new HashMap<String, Object>();
//buffer用于接受返回的字符
StringBuffer buffer = new StringBuffer();
try {
TrustManager[] tm = {new MyX509TrustManager()};
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url= new URL(null, requestUrl, new sun.net.www.protocol.https.Handler());
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.connect();
//获得输入
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//将bufferReader的值给放到buffer里
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
//关闭bufferReader和输入流
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
//断开连接
httpUrlConn.disconnect();
/**
* JSON
*/
String jsonStr = buffer.toString();
JSONObject jsonObject = JSONObject.fromObject(jsonStr).getJSONObject("data");
int code = jsonObject.optInt("code");//0服务正常。-1服务出错
if (code != 0) {
//初始化节假日失败,获取网络服务出错
resultMap.put("status", "0");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(520011, user.getLanguage()));
return resultMap;
}
JSONObject holiday = jsonObject.getJSONObject("holiday");
if (holiday.size() == 0) {
//初始化节假日失败,暂未获取到所选年份的节假日数据
resultMap.put("status", "0");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(505673, user.getLanguage()));
return resultMap;
}
Map<String, Object> holidayMap = new HashMap<String, Object>();
List<Map<String, Object>> holidayList = new ArrayList<Map<String, Object>>();
Iterator iterator = holiday.keys();
while (iterator.hasNext()) {
holidayMap = new HashMap<String, Object>();
String holidayDate = (String) iterator.next();
holidayMap.put("holidayDate", holidayDate);//日期
JSONObject detailInfo = holiday.getJSONObject(holidayDate);
int wage = detailInfo.optInt("wage");
if (wage == 1) {
holidayMap.put("changeType", 2);//调配工作日
} else if (wage == 2) {
holidayMap.put("changeType", 3);//调配休息日
} else if (wage == 3) {
holidayMap.put("changeType", 1);//公众假日
}
String holidayDesc = detailInfo.getString("name");
holidayMap.put("holidayDesc", holidayDesc);//说明
holidayList.add(holidayMap);
}
resultMap.put("status", "1");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(505674, user.getLanguage()));
resultMap.put("holidayList", holidayList);
} catch (Exception e) {
e.printStackTrace();
resultMap.put("status", "0");
resultMap.put("sketch", SystemEnv.getHtmlLabelName(520011, user.getLanguage()));
return resultMap;
}
return resultMap;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,239 +0,0 @@
package com.engine.kq.biz;
import weaver.cache.*;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
*
*/
public class KQReportFieldComInfo extends CacheBase{
protected static String TABLE_NAME = "kq_report_field";
/** sql中的where信息不要以where开始 */
protected static String TABLE_WHERE = null;
/** sql中的order by信息不要以order by开始 */
protected static String TABLE_ORDER = "showorder";
@PKColumn(type = CacheColumnType.NUMBER)
protected static String PK_NAME = "id";
@CacheColumn(name = "fieldname")
protected static int fieldname;
@CacheColumn(name = "fieldlabel")
protected static int fieldlabel;
@CacheColumn(name = "unittype")
protected static int unittype;
@CacheColumn(name = "width")
protected static int width;
@CacheColumn(name = "parentid")
protected static int parentid;
@CacheColumn(name = "isdefinedcolumn")
protected static int isdefinedcolumn;
@CacheColumn(name = "defaultshow")
protected static int defaultshow;
@CacheColumn(name = "isleavetype")
protected static int isleavetype;
@CacheColumn(name = "reporttype")
protected static int reporttype;
@CacheColumn(name = "reporttype1")
protected static int reporttype1;
@CacheColumn(name = "isdataColumn")
protected static int isdataColumn;
@CacheColumn(name = "showDetial")
protected static int showDetial;
@CacheColumn(name = "groupid")
protected static int groupid;
@CacheColumn(name = "isenable")
protected static int isenable;
// #1276494 概述:满足薪酬指标项关联考勤报表列数据需求 By T.W
@CacheColumn(name = "if_salary_need")
protected static int ifSalaryNeed;
@CacheColumn(name = "formula")
protected static int formula;
@CacheColumn(name = "issystem")
protected static int issystem;
@CacheColumn(name = "cascadekey")
protected static int cascadekey;
@CacheColumn(name = "dailyShowOrder")
protected static int dailyShowOrder;
public static ConcurrentHashMap<String, String> cascadekey2fieldname = new ConcurrentHashMap<String, String>();
public static ConcurrentHashMap<String, String> field2Id = new ConcurrentHashMap<String, String>();
@Override
protected CacheMap initCache() throws Exception {
CacheMap localData = createCacheMap();
RecordSet rs = new RecordSet();
cascadekey2fieldname.clear();
field2Id.clear();
// String sql = " select a.id,fieldname,fieldlabel,width,unittype,parentid,isdefinedcolumn,defaultshow,isleavetype," +
// " reporttype,isdatacolumn,showdetial,a.showorder,groupid,isenable,formula,issystem,cascadekey " +
// " from kq_report_field a left join kq_report_field_group b on a.groupid = b.id " +
// " order by b.showorder asc, a.showorder asc ";
// #1276494 概述:满足薪酬指标项关联考勤报表列数据需求 By T.W
String sql = " SELECT id, fieldname,fieldlabel, unittype,width,parentid,isdefinedcolumn,defaultshow,isleavetype,'month' as reporttype, reporttype as reporttype1,isdataColumn," +
" showDetial,groupid,isenable,if_salary_need,formula,issystem,cascadekey,dailyShowOrder FROM kq_report_field where fieldname= 'lastname' ";
rs.executeQuery(sql);
while (rs.next()) {
if(Util.null2String(rs.getString("cascadekey")).length()>0){
String[] arrCascadekey = Util.splitString(rs.getString("cascadekey"),",");
for(int i=0;i<arrCascadekey.length;i++){
cascadekey2fieldname.put(arrCascadekey[i],rs.getString("fieldname"));
}
}
String id = Util.null2String(rs.getString(PK_NAME))+""+Util.null2String(rs.getString("reporttype"));
field2Id.put(Util.null2String(rs.getString("fieldname")),id);
CacheItem cacheItem = createCacheItem();
parseResultSetToCacheItem(rs, cacheItem);
modifyCacheItem(id, cacheItem);
localData.put(id, cacheItem);
}
// #1276494 概述:满足薪酬指标项关联考勤报表列数据需求 By T.W
sql = " SELECT id, fieldname,fieldlabel, unittype,width,parentid,isdefinedcolumn,defaultshow,isleavetype,'month' as reporttype, reporttype as reporttype1,isdataColumn," +
" showDetial,groupid,isenable,if_salary_need,formula,issystem,cascadekey,dailyShowOrder FROM (" +
" SELECT CASE WHEN b.showorder IS NULL THEN 999 ELSE b.showorder END AS tmp_showorder," +
" a.* " +
" FROM kq_report_field a LEFT JOIN kq_report_field_group b ON a.groupid = b.id where reportType in('all','month')) a" +
" ORDER BY a.tmp_showorder ASC, a.showorder ASC ";
rs.executeQuery(sql);
while (rs.next()) {
if(Util.null2String(rs.getString("cascadekey")).length()>0){
String[] arrCascadekey = Util.splitString(rs.getString("cascadekey"),",");
for(int i=0;i<arrCascadekey.length;i++){
cascadekey2fieldname.put(arrCascadekey[i],rs.getString("fieldname"));
}
}
String id = Util.null2String(rs.getString(PK_NAME))+""+Util.null2String(rs.getString("reporttype"));
field2Id.put(Util.null2String(rs.getString("fieldname")),id);
CacheItem cacheItem = createCacheItem();
parseResultSetToCacheItem(rs, cacheItem);
modifyCacheItem(id, cacheItem);
localData.put(id, cacheItem);
}
// #1276494 概述:满足薪酬指标项关联考勤报表列数据需求 By T.W
sql = " SELECT id, fieldname,fieldlabel, unittype,width,parentid,isdefinedcolumn,defaultshow,isleavetype,'daily' as reporttype,reporttype as reporttype1, isdataColumn," +
" showDetial,groupid,isenable,if_salary_need,formula,issystem,cascadekey,dailyShowOrder" +
" FROM kq_report_field a where reportType in('all','daily') ORDER BY dailyShowOrder ASC ";
rs.executeQuery(sql);
while (rs.next()) {
String id = Util.null2String(rs.getString(PK_NAME))+""+Util.null2String(rs.getString("reporttype"));
CacheItem cacheItem = createCacheItem();
parseResultSetToCacheItem(rs, cacheItem);
modifyCacheItem(id, cacheItem);
localData.put(id, cacheItem);
}
return localData;
}
public String getId(){
return (String)getRowValue(PK_INDEX);
}
public String getFieldname() { return (String)getRowValue(fieldname); }
public String getFieldname(String key)
{
return (String)getValue(fieldname,key);
}
public String getFieldlabel() { return (String)getRowValue(fieldlabel); }
public String getFieldlabel(String key)
{
return (String)getValue(fieldlabel,key);
}
public String getUnittype() { return (String)getRowValue(unittype); }
public String getUnittype(String key)
{
return (String)getValue(unittype,key);
}
public String getWidth() { return (String)getRowValue(width); }
public String getWidth(String key)
{
return (String)getValue(width,key);
}
public String getParentid() { return (String)getRowValue(parentid); }
public String getParentid(String key)
{
return (String)getValue(parentid,key);
}
public String getIsDefinedColumn() { return (String)getRowValue(isdefinedcolumn); }
public String getIsDefinedColumn(String key)
{
return (String)getValue(isdefinedcolumn,key);
}
public String getDefaultShow() { return (String)getRowValue(defaultshow); }
public String getDefaultShow(String key)
{
return (String)getValue(defaultshow,key);
}
public String getIsLeaveType() { return (String)getRowValue(isleavetype); }
public String getIsLeaveType(String key) { return (String)getValue(isleavetype,key); }
public String getReportType() { return (String)getRowValue(reporttype); }
public String getReportType(String key) { return (String)getValue(reporttype,key); }
public String getReportType1() { return (String)getRowValue(reporttype1); }
public String getReportType1(String key) { return (String)getValue(reporttype1,key); }
public String getIsdataColumn() { return (String)getRowValue(isdataColumn); }
public String getIsdataColumn(String key) { return (String)getValue(isdataColumn,key); }
public String getShowDetial() { return (String)getRowValue(showDetial); }
public String getShowDetial(String key) { return (String)getValue(showDetial,key); }
public String getGroupid() { return (String)getRowValue(groupid); }
public String getGroupid(String key) { return (String)getValue(groupid,key); }
public String getIsenable() { return (String)getRowValue(isenable); }
public String getIsenable(String key) { return (String)getValue(isenable,key); }
// #1276494 概述:满足薪酬指标项关联考勤报表列数据需求 By T.W
public String getIfSalaryNeed() {
return (String) getRowValue(ifSalaryNeed);
}
public String getIfSalaryNeed(String key) {
return (String) getValue(ifSalaryNeed, key);
}
public String getFormula() { return (String)getRowValue(formula); }
public String getFormula(String key) { return (String)getValue(formula,key); }
public String getIsSystem() { return (String)getRowValue(issystem); }
public String getIsSystem(String key) { return (String)getValue(issystem,key); }
public String getCascadekey() { return (String)getRowValue(cascadekey); }
public String getCascadekey(String key) { return (String)getValue(cascadekey,key); }
public String getDailyShowOrder() { return (String)getRowValue(dailyShowOrder); }
public String getDailyShowOrder(String key) { return (String)getValue(dailyShowOrder,key); }
}

@ -1,293 +0,0 @@
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();
}
}

@ -1,979 +0,0 @@
package com.engine.kq.cmd.group;
import com.api.browser.bean.SearchConditionItem;
import com.api.browser.bean.SearchConditionOption;
import com.api.hrm.bean.HrmFieldBean;
import com.api.hrm.util.HrmFieldSearchConditionComInfo;
import com.cloudstore.dev.api.util.Util_TableMap;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.KQGroupComInfo;
import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit;
import com.engine.kq.util.PageUidFactory;
import com.engine.kq.util.UtilKQ;
import com.google.common.collect.Maps;
import org.apache.commons.collections.CollectionUtils;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.hrm.moduledetach.ManageDetachComInfo;
import weaver.hrm.settings.ChgPasswdReminder;
import weaver.hrm.settings.RemindSettings;
import weaver.proj.util.SQLUtil;
import weaver.systeminfo.SystemEnv;
import weaver.systeminfo.systemright.CheckSubCompanyRight;
import java.util.*;
public class GetGroupFormCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetGroupFormCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String,Object> retmap = new HashMap<String,Object>();
List<Map<String,Object>> grouplist = new ArrayList<Map<String,Object>>();
Map<String,Object> groupitem = null;
List<Object> itemlist = null;
Map<String, Object> otherparam = null;
RecordSet rs = new RecordSet();
String sql = "";
try{
//必要的权限判断
if(!HrmUserVarify.checkUserRight("HrmKQGroup:Add",user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
ChgPasswdReminder reminder=new ChgPasswdReminder();
RemindSettings settings=reminder.getRemindSettings();
KQGroupComInfo kQGroupComInfo = new KQGroupComInfo();
ManageDetachComInfo manageDetachComInfo = new ManageDetachComInfo();
boolean hrmdetachable = manageDetachComInfo.isUseHrmManageDetach();//是否开启了人力资源模块的管理分权
String id = Util.null2String(params.get("id"));
String subcompanyid = Util.null2String(params.get("subcompanyid"));//所属分部
String tabKey = Util.null2String(params.get("tabKey"));
Map<String, List<HrmFieldBean>> fieldGroups= new LinkedHashMap<String, List<HrmFieldBean>>();
List<HrmFieldBean> lsField = new ArrayList<HrmFieldBean>();
HrmFieldBean hrmFieldBean = null;
List<SearchConditionOption> options = null;
String groupname = "";//考勤组名称
String kqtype = "1";//考勤类型 默认固定班制
String excludeid = "";//考勤组排除人员
String excludecount = "";//考勤组排除人员是否参与统计
String serialids = "";//考勤班次
String overtimeRuleId = "";//加班班次
String overtimeType = "0";//加班类型
List<Integer> lsWeekday = new ArrayList<>();//考勤工作日
String weekday = "";
String signstart = "";//考勤开始时间
String workhour = "";//工作时长
String signintype = "1";//打卡方式
String ipscope = "";//应用IP范围
String ipscope_v4_pc = "";//应用IP范围 v4 pc端
String ipscope_v4_em = "";//应用IP范围 v4 移动端
String ipscope_v6_pc = "";//应用IP范围 v6 pc端
String ipscope_v6_em = "";//应用IP范围 v6 移动端
String locationcheck = "";//启用办公地点考勤
//String locationcheckscope = "300";//有效范围
String wificheck = "";//启用wifi考勤
String outsidesign = "";//允许外勤打卡
String outsignapprove = "";//545427 外勤打卡需要审批
String validity = "";//考勤组有效期
String validityfromdate = "";//考勤组有效期开始时间
String validityenddate = "";//考勤组有效期结束时间
String locationfacecheck = "";//办公地点启用人脸识别拍照打卡
String locationfacechecktype = "";//办公地点启用人脸识别拍照打卡方式
String locationshowaddress = "";//有效识别半径内显示同一地址
String wififacecheck = "";//wifi启用人脸识别拍照打卡
String wififacechecktype = "";//wifi启用人脸识别拍照打卡方式
String self_shift = "0";//启用员工自我排班
String auto_checkin = "0";//允许客户端设置自动考勤 上班卡
String auto_checkin_before = "30";//允许客户端设置自动考勤 上班卡开始分钟数
String auto_checkin_after = "30";//允许客户端设置自动考勤 上班卡结束分钟时
String auto_checkout = "0";//允许客户端设置自动考勤 下班卡
String auto_checkout_before = "5";//允许客户端设置自动考勤 下班卡 下班卡开始分钟数
String auto_checkout_after = "60";//允许客户端设置自动考勤 下班卡 下班卡结束分钟时
String calmethod = "1";//工作时长计算方式 1是打卡时间累加计算 2是打卡时间成对计算
String abnormalremind = "0";//考勤异常提醒 1是打开 0是关闭
String isPhotoPunchEnabled = "0";//启用考勤拍照打卡
List<Map<String,Object>> replaceDatas = new ArrayList<Map<String,Object>>();
if(id.length()>0){
sql = "select * from kq_group where id=?";
rs.executeQuery(sql,id);
if(rs.next()){
groupname = Util.null2String(rs.getString("groupname"));
excludeid = Util.null2String(rs.getString("excludeid"));
excludecount = Util.null2String(rs.getString("excludecount"));
subcompanyid = Util.null2String(rs.getString("subcompanyid"));
kqtype = Util.null2String(rs.getString("kqtype"));
serialids=Util.null2String(rs.getString("serialids"));
overtimeType=Util.null2s(rs.getString("overtime_type"),"0");
weekday = Util.null2String(rs.getString("weekday"));
signstart = Util.null2String(rs.getString("signstart"));
workhour = Util.null2String(rs.getString("workhour"));
signintype = Util.null2String(rs.getString("signintype"));
ipscope = Util.null2String(rs.getString("ipscope"));
ipscope_v4_pc = Util.null2String(rs.getString("ipscope_v4_pc"));
ipscope_v4_em = Util.null2String(rs.getString("ipscope_v4_em"));
ipscope_v6_pc = Util.null2String(rs.getString("ipscope_v6_pc"));
ipscope_v6_em = Util.null2String(rs.getString("ipscope_v6_em"));
locationcheck = Util.null2String(rs.getString("locationcheck"));
//locationcheckscope = Util.null2String(rs.getString("locationcheckscope"));
wificheck = Util.null2String(rs.getString("wificheck"));
outsidesign = Util.null2String(rs.getString("outsidesign"));
outsignapprove = Util.null2String(rs.getString("outsignapprove"));
validity = Util.null2String(rs.getString("validity"));
validityfromdate = Util.null2String(rs.getString("validityfromdate"));
validityenddate = Util.null2String(rs.getString("validityenddate"));
locationfacecheck = Util.null2String(rs.getString("locationfacecheck"));
locationfacechecktype = Util.null2String(rs.getString("locationfacechecktype"));
locationshowaddress = Util.null2String(rs.getString("locationshowaddress"));
wififacecheck = Util.null2String(rs.getString("wififacecheck"));
wififacechecktype = Util.null2String(rs.getString("wififacechecktype"));
self_shift = Util.null2String(rs.getString("self_shift"));
auto_checkin = Util.null2String(rs.getString("auto_checkin"),"0");
auto_checkin_before = Util.null2String(rs.getString("auto_checkin_before"),"30");
auto_checkin_after = Util.null2String(rs.getString("auto_checkin_after"),"30");
auto_checkout = Util.null2String(rs.getString("auto_checkout"),"0");
auto_checkout_before = Util.null2String(rs.getString("auto_checkout_before"),"5");
auto_checkout_after = Util.null2String(rs.getString("auto_checkout_after"),"60");
calmethod = Util.null2s(rs.getString("calmethod"),"1");
isPhotoPunchEnabled = Util.null2s(rs.getString("isPhotoPunchEnabled"),"0");
abnormalremind = Util.null2String(rs.getString("abnormalremind"));
}
if("0".equals(overtimeType)){
String dbtype = rs.getDBType();
String overSql = "select * from kq_overtimerules where ','+convert(varchar(2000),groupids)+',' like '%," + id + ",%' and (isDelete is null or isDelete!=1) ";
if ("oracle".equalsIgnoreCase(dbtype)) {
overSql = "select * from kq_overtimerules where "+SQLUtil.filteSql(rs.getDBType(), " ','+groupids+',' like '%," + id + ",%' and (isDelete is null or isDelete!=1) ");
}else if("mysql".equalsIgnoreCase(dbtype)){
overSql = "select * from kq_overtimerules where CONCAT(',',cast(groupids as char),',') like '%,"+id+",%' and (isDelete is null or isDelete!=1) ";
}else if ("postgresql".equalsIgnoreCase(dbtype)) {
overSql = "select * from kq_overtimerules where CONCAT(',',groupids,',') like '%,"+id+",%' and (isDelete is null or isDelete!=1) ";
}
Map<String,Object> map = new HashMap<String,Object>();
rs.execute(overSql);
if(rs.next()){
String oId = rs.getString("id");
overtimeRuleId = oId;
String name = rs.getString("name");
map.put("id", oId);
map.put("name", name);
replaceDatas.add(map);
}
}
}
if(tabKey.equals("1")){
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("groupname");
hrmFieldBean.setFieldlabel("388700");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(groupname);
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setRules("required|string");
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("excludeid");
hrmFieldBean.setFieldlabel("388703");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("17");
hrmFieldBean.setFieldvalue(excludeid);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("overtime_type");
hrmFieldBean.setFieldlabel("388881");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("3");
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("0",SystemEnv.getHtmlLabelName(126821, user.getLanguage()),overtimeType.equals("0")));
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(546276, user.getLanguage()),overtimeType.equals("1")));
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setFieldvalue(overtimeType);
hrmFieldBean.setViewAttr(2);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("overtime_rule_id");
hrmFieldBean.setFieldlabel("388881");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("kqovertimerule");
hrmFieldBean.setFieldvalue(overtimeRuleId);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("excludecount");
hrmFieldBean.setFieldlabel("507794");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(excludecount);
lsField.add(hrmFieldBean);
//增加有效期设置
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("validity");
hrmFieldBean.setFieldlabel("15030");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(validity);
lsField.add(hrmFieldBean);
//考勤异常提醒
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("abnormalremind");
hrmFieldBean.setFieldlabel("547511");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(abnormalremind);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("validityfromdate");
hrmFieldBean.setFieldlabel("742");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(validityfromdate);
hrmFieldBean.setRules("required|string");
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setIsFormField(true);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("validityenddate");
hrmFieldBean.setFieldlabel("743");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(validityenddate);
hrmFieldBean.setRules("required|string");
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setIsFormField(true);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("self_shift");
hrmFieldBean.setFieldlabel("517026");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(self_shift);
lsField.add(hrmFieldBean);
String defaultSubcompanyid = "";
if(hrmdetachable){
CheckSubCompanyRight newCheck=new CheckSubCompanyRight();
int[] subcomids = newCheck.getSubComByUserRightId(user.getUID(),"HrmKQGroup:Add",0);
ManageDetachComInfo detachComInfo = new ManageDetachComInfo();
if(detachComInfo.isUseHrmManageDetach()){
defaultSubcompanyid = detachComInfo.getHrmdftsubcomid();
}else{
rs.executeProc("SystemSet_Select","");
if(rs.next()){
if(subcompanyid.length()==0||subcompanyid.equals("0")){
defaultSubcompanyid = Util.null2String(rs.getString("dftsubcomid"));
}
}
}
boolean hasRight = false;
for (int i = 0; subcomids!=null&& i < subcomids.length; i++) {
if((""+subcomids[i]).equals(defaultSubcompanyid)){
hasRight = true;
break;
}
}
if(!hasRight){
defaultSubcompanyid = "";
}
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("subcompanyid");
hrmFieldBean.setFieldlabel("19799");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("169");
hrmFieldBean.setFieldvalue(subcompanyid.length()==0&&id.length()==0?defaultSubcompanyid:subcompanyid);
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setRules("required|integer");
lsField.add(hrmFieldBean);
}
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("kqtype");
hrmFieldBean.setFieldlabel("388704");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("3");
hrmFieldBean.setFieldvalue(kqtype);
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(500385, user.getLanguage()),kqtype.equals("1")));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(500386, user.getLanguage()),kqtype.equals("2")));
options.add(new SearchConditionOption("3",SystemEnv.getHtmlLabelName(500387, user.getLanguage()),kqtype.equals("3")));
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setViewAttr(id.length()>0?1:2);
lsField.add(hrmFieldBean);
//固定班制
retmap.put("fixedSchedulce",getFixedSchedulce());
//排班制
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("serialids");
hrmFieldBean.setFieldlabel("389098");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("mkqshift");
hrmFieldBean.setFieldvalue(serialids);
lsField.add(hrmFieldBean);
retmap.put("shiftSchedulceTable",getShiftSchedulceTable());
//自由班制
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("weekday");
hrmFieldBean.setFieldlabel("389097");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(weekday);
options = new ArrayList<SearchConditionOption>();
for(int i=0;i<7;i++){
options.add(new SearchConditionOption(""+i,UtilKQ.getWeekDay(i,user.getLanguage()),lsWeekday.contains(i)));
}
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("signstart");
hrmFieldBean.setFieldlabel("16039");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("19");
hrmFieldBean.setFieldvalue(signstart);
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setRules("required|string");
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("workhour");
hrmFieldBean.setFieldlabel("390053");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(workhour);
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setRules("required|numeric");
otherparam = new HashMap<String, Object>();
otherparam.put("min","1");
otherparam.put("precision",1);
otherparam.put("max","24");
hrmFieldBean.setOtherparam(otherparam);
lsField.add(hrmFieldBean);
if(id.length()>0){
// 编辑的时候只有弹性的显示这个说明
if(kqtype.equals("3")){
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("calmethod");
hrmFieldBean.setFieldlabel("529683");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("3");
hrmFieldBean.setFieldvalue(calmethod);
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(529686, user.getLanguage()),calmethod.equals("1")));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(529685, user.getLanguage()),calmethod.equals("2")));
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setViewAttr(3);
lsField.add(hrmFieldBean);
}
}else{
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("calmethod");
hrmFieldBean.setFieldlabel("529683");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("3");
hrmFieldBean.setFieldvalue(calmethod);
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(529686, user.getLanguage()),calmethod.equals("1")));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(529685, user.getLanguage()),calmethod.equals("2")));
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setViewAttr(3);
lsField.add(hrmFieldBean);
}
if(id.length()>0){
// 编辑的时候只有弹性的显示这个说明
if(kqtype.equals("3")){
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("desc");
hrmFieldBean.setFieldlabel("85");
hrmFieldBean.setFieldhtmltype("8");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(SystemEnv.getHtmlLabelName(520468, Util.getIntValue(user.getLanguage()))
+"<br/>"+SystemEnv.getHtmlLabelName(520469, Util.getIntValue(user.getLanguage()))
+"<br/>"+SystemEnv.getHtmlLabelName(520859, Util.getIntValue(user.getLanguage())));
hrmFieldBean.setViewAttr(1);
lsField.add(hrmFieldBean);
}
}else{
//新增的时候需要前端控制显示这个字段
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("desc");
hrmFieldBean.setFieldlabel("85");
hrmFieldBean.setFieldhtmltype("8");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(SystemEnv.getHtmlLabelName(520468, Util.getIntValue(user.getLanguage()))
+"<br/>"+SystemEnv.getHtmlLabelName(520469, Util.getIntValue(user.getLanguage()))
+"<br/>"+SystemEnv.getHtmlLabelName(520859, Util.getIntValue(user.getLanguage())));
hrmFieldBean.setViewAttr(1);
lsField.add(hrmFieldBean);
}
fieldGroups.put("1361", lsField);
}else if(tabKey.equals("2")){
//signintype,ipscope,locationcheck,locationcheckscope,wificheck
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("signintype");
hrmFieldBean.setFieldlabel("388708");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("3");
hrmFieldBean.setFieldvalue(signintype);
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(389938, user.getLanguage()),signintype.equals("1")));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(388710, user.getLanguage()),signintype.equals("2")));
options.add(new SearchConditionOption("3",SystemEnv.getHtmlLabelName(389939, user.getLanguage()),signintype.equals("3")));
options.add(new SearchConditionOption("4",SystemEnv.getHtmlLabelName(502765, user.getLanguage()),signintype.equals("4")));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("ipscope_v4_pc");
hrmFieldBean.setFieldlabel("388712");
hrmFieldBean.setFieldlabelname(SystemEnv.getHtmlLabelName(388712, Util.getIntValue(user.getLanguage()))+"( ipv4 )");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(ipscope_v4_pc);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("ipscope_v4_em");
hrmFieldBean.setFieldlabel("388712");
hrmFieldBean.setFieldlabelname(SystemEnv.getHtmlLabelName(388712, Util.getIntValue(user.getLanguage()))+"( ipv4 )");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(ipscope_v4_em);
lsField.add(hrmFieldBean);
// hrmFieldBean = new HrmFieldBean();
// hrmFieldBean.setFieldname("ipscope_v6_pc");
// hrmFieldBean.setFieldlabel("388712");
// hrmFieldBean.setFieldlabelname(SystemEnv.getHtmlLabelName(388712,weaver.general.Util.getIntValue(user.getLanguage()))+"( ipv6 )");
// hrmFieldBean.setFieldhtmltype("1");
// hrmFieldBean.setType("1");
// hrmFieldBean.setFieldvalue(ipscope_v6_pc);
// lsField.add(hrmFieldBean);
//
// hrmFieldBean = new HrmFieldBean();
// hrmFieldBean.setFieldname("ipscope_v6_em");
// hrmFieldBean.setFieldlabel("388712");
// hrmFieldBean.setFieldlabelname(SystemEnv.getHtmlLabelName(388712,weaver.general.Util.getIntValue(user.getLanguage()))+"( ipv6 )");
// hrmFieldBean.setFieldhtmltype("1");
// hrmFieldBean.setType("1");
// hrmFieldBean.setFieldvalue(ipscope_v6_em);
// lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("outsidesign");
hrmFieldBean.setFieldlabel("390302");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setTip(SystemEnv.getHtmlLabelNames("545433,545434,545435" ,user.getLanguage()));
hrmFieldBean.setFieldvalue(outsidesign);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("isPhotoPunchEnabled");
hrmFieldBean.setFieldlabel("547013");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(isPhotoPunchEnabled);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("outsignapprove");
hrmFieldBean.setFieldlabel("545427");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setTip(SystemEnv.getHtmlLabelName(545466,user.getLanguage()));
hrmFieldBean.setFieldvalue(outsignapprove);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("locationcheck");
hrmFieldBean.setFieldlabel("388713");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(locationcheck);
lsField.add(hrmFieldBean);
// hrmFieldBean = new HrmFieldBean();
// hrmFieldBean.setFieldname("locationcheckscope");
// hrmFieldBean.setFieldlabel("388714");
// hrmFieldBean.setFieldhtmltype("5");
// hrmFieldBean.setType("1");
// hrmFieldBean.setFieldvalue(locationcheckscope);
// options = new ArrayList<SearchConditionOption>();
// options.add(new SearchConditionOption("50","50"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("50")));
// options.add(new SearchConditionOption("100","100"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("100")));
// options.add(new SearchConditionOption("200","200"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("200")));
// options.add(new SearchConditionOption("300","300"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("300")));
// options.add(new SearchConditionOption("400","400"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("400")));
// options.add(new SearchConditionOption("500","500"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("500")));
// options.add(new SearchConditionOption("600","600"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("600")));
// options.add(new SearchConditionOption("700","700"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("700")));
// options.add(new SearchConditionOption("800","800"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("800")));
// options.add(new SearchConditionOption("900","900"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("900")));
// options.add(new SearchConditionOption("1000","1000"+SystemEnv.getHtmlLabelName(125675, user.getLanguage()),locationcheckscope.equals("1000")));
// hrmFieldBean.setSelectOption(options);
// lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("locationfacecheck");
hrmFieldBean.setFieldlabel("507921");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(locationfacecheck);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("locationfacechecktype");
hrmFieldBean.setFieldlabel("537091");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(locationfacechecktype);
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(537092,user.getLanguage()),true));
if("1".equals(settings.getSecondCL())){
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(537093,user.getLanguage())));
}
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setTip(SystemEnv.getHtmlLabelName(537095,user.getLanguage()));
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("locationshowaddress");
hrmFieldBean.setFieldlabel("507922");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(locationshowaddress);
hrmFieldBean.setTip(SystemEnv.getHtmlLabelName(507990,user.getLanguage()));
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("wificheck");
hrmFieldBean.setFieldlabel("388715");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(wificheck);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("wififacecheck");
hrmFieldBean.setFieldlabel("507921");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(wififacecheck);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("wififacechecktype");
hrmFieldBean.setFieldlabel("537091");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(wififacechecktype);
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(537092,user.getLanguage())));
if("1".equals(settings.getSecondCL())){
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(537093,user.getLanguage())));
}
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setTip(SystemEnv.getHtmlLabelName(537095,user.getLanguage()));
lsField.add(hrmFieldBean);
if(!"3".equalsIgnoreCase(kqtype)){
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("auto_checkin");
hrmFieldBean.setFieldlabel("518736");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(Util.null2s(auto_checkin,"0"));
hrmFieldBean.setTip(SystemEnv.getHtmlLabelName(521383,user.getLanguage()));
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("auto_checkin_before");
hrmFieldBean.setFieldlabel("518737");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(Util.null2s(auto_checkin_before,"30"));
hrmFieldBean.setRules("required|integer");
otherparam = new HashMap<String, Object>();
otherparam.put("min","1");
hrmFieldBean.setOtherparam(otherparam);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("auto_checkin_after");
hrmFieldBean.setFieldlabel("518737");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(Util.null2s(auto_checkin_after,"30"));
hrmFieldBean.setRules("required|integer");
otherparam = new HashMap<String, Object>();
otherparam.put("min","0");
hrmFieldBean.setOtherparam(otherparam);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("auto_checkout");
hrmFieldBean.setFieldlabel("518738");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(Util.null2s(auto_checkout,"0"));
hrmFieldBean.setTip(SystemEnv.getHtmlLabelName(521383,user.getLanguage()));
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("auto_checkout_before");
hrmFieldBean.setFieldlabel("518739");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(Util.null2s(auto_checkout_before,"5"));
hrmFieldBean.setRules("required|integer");
otherparam = new HashMap<String, Object>();
otherparam.put("min","0");
hrmFieldBean.setOtherparam(otherparam);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("auto_checkout_after");
hrmFieldBean.setFieldlabel("518739");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(Util.null2s(auto_checkout_after,"60"));
hrmFieldBean.setRules("required|integer");
otherparam = new HashMap<String, Object>();
otherparam.put("min","0");
hrmFieldBean.setOtherparam(otherparam);
lsField.add(hrmFieldBean);
}
//排班校验下拉框
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("pbcheck");
hrmFieldBean.setFieldlabel("-85230");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue("1");
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1", "不校验"));
options.add(new SearchConditionOption("2", "做五休二"));
options.add(new SearchConditionOption("3", "做四休二"));
hrmFieldBean.setSelectOption(options);
hrmFieldBean.setViewAttr(id.length()>0?1:2);
fieldGroups.put("20331", lsField);
retmap.put("locationSessionKey",getKQLocationList(""));
retmap.put("wifiSessionKey",getKQWifiList(""));
Map<String,Object> helpTipMap = Maps.newHashMap();
helpTipMap.put("auto_checkin_before", SystemEnv.getHtmlLabelName(521211, user.getLanguage()));
helpTipMap.put("auto_checkout_before", SystemEnv.getHtmlLabelName(521211, user.getLanguage()));
retmap.put("helpTipMap",helpTipMap);
}
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo();
SearchConditionItem searchConditionItem = null;
Iterator<Map.Entry<String, List<HrmFieldBean>>> iter = fieldGroups.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, List<HrmFieldBean>> entry = iter.next();
String grouplabel = entry.getKey();
List<HrmFieldBean> fields = entry.getValue();
groupitem = new HashMap<String, Object>();
groupitem.put("title", SystemEnv.getHtmlLabelNames(grouplabel, user.getLanguage()));
groupitem.put("defaultshow", true);
itemlist = new ArrayList<Object>();
for (int j = 0; j < fields.size(); j++) {
hrmFieldBean = fields.get(j);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
if(hrmFieldBean.getFieldname().equals("subcompanyid")){
searchConditionItem.getBrowserConditionParam().getDataParams().put("rightStr", "HrmKQGroup:Add");
searchConditionItem.getBrowserConditionParam().getCompleteParams().put("rightStr", "HrmKQGroup:Add");
}
if(hrmFieldBean.getFieldname().equals("overtime_rule_id")){
if(CollectionUtils.isNotEmpty(replaceDatas)){
searchConditionItem.getBrowserConditionParam().setReplaceDatas(replaceDatas);
}
}
if(hrmFieldBean.getFieldname().equals("overtime_type")){
searchConditionItem.setHelpfulTip(SystemEnv.getHtmlLabelName(546300, user.getLanguage()));
}
itemlist.add(searchConditionItem);
}
groupitem.put("items", itemlist);
grouplist.add(groupitem);
}
retmap.put("formField", grouplist);
retmap.put("status", "1");
int operatelevel = -1;
if(hrmdetachable){
if(subcompanyid.length()>0 && !subcompanyid.equalsIgnoreCase("0")){
CheckSubCompanyRight checkSubCompanyRight = new CheckSubCompanyRight();
operatelevel=checkSubCompanyRight.ChkComRightByUserRightCompanyId(user.getUID(),"HrmKQGroup:Add",Util.getIntValue(subcompanyid,-1));
}
}else{
operatelevel = 2;
}
if(user.getUID() == 1 || subcompanyid.length()==0 || subcompanyid.equalsIgnoreCase("0")){
operatelevel = 2;
}
if(operatelevel > 0){
retmap.put("canAdd", true);
}else{
retmap.put("canAdd", false);
}
retmap.put("kqtype", kqtype);
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
public String getKQLocationList(String locationname){
String sessionKey = "";
String groupId = Util.null2String(params.get("id"));
String backFields = " id,locationname,longitude,latitude,address,checkscope ";
String sqlFrom = " kq_location ";
String sqlWhere = " where groupid= "+groupId;
String orderby = " id " ;
String tableString = "";
if (locationname.length() > 0){
sqlWhere += " and locationname like '%"+locationname+"%' ";
}
String pageUid = PageUidFactory.getHrmPageUid("KQLocationList");
tableString=""+
"<table pageUid=\""+pageUid+"\" pagesize=\"10\" tabletype=\"checkbox\">"+
"<sql backfields=\""+backFields+"\" sqlform=\""+sqlFrom+"\" sqlprimarykey=\"id\" sqlorderby=\""+orderby+"\" sqlsortway=\"asc\" sqldistinct=\"true\" sqlwhere=\""+Util.toHtmlForSplitPage(sqlWhere)+"\"/>"+
"<head>"+
" <col width=\"20%\" text=\""+SystemEnv.getHtmlLabelName(388717,user.getLanguage())+"\" column=\"locationname\"/>"+
" <col width=\"20%\" text=\""+SystemEnv.getHtmlLabelName(801,user.getLanguage())+"\" column=\"longitude\" orderkey=\"longitude\"/>"+
" <col width=\"20%\" text=\""+SystemEnv.getHtmlLabelName(802,user.getLanguage())+"\" column=\"latitude\" orderkey=\"latitude\"/>"+
" <col width=\"20%\" text=\""+SystemEnv.getHtmlLabelName(507863,user.getLanguage())+"\" column=\"checkscope\" orderkey=\"checkscope\"/>"+
" <col width=\"20%\" text=\""+SystemEnv.getHtmlLabelName(104,user.getLanguage())+"\" column=\"id\" orderkey=\"id\"/>"+
" <col width=\"0%\" hide=\"true\" display=\"true\" text=\"\" column=\"address\"/>"+
"</head>"+
"</table>";
//主要用于 显示定制列以及 表格 每页展示记录数选择
sessionKey = pageUid + "_" + Util.getEncrypt(Util.getRandom());
Util_TableMap.setVal(sessionKey, tableString);
return sessionKey;
}
public String getKQWifiList(String wifiname){
String sessionKey = "";
String groupId = Util.null2String(params.get("id"));
String backFields = " id,wifiname,mac ";
String sqlFrom = " kq_wifi ";
String sqlWhere = " where groupid= "+groupId;
String orderby = " id " ;
String tableString = "";
if (wifiname.length() > 0){
sqlWhere += " and wifiname like '%"+wifiname+"%' ";
}
String pageUid = PageUidFactory.getHrmPageUid("KQLocationList");
tableString=""+
"<table pageUid=\""+pageUid+"\" pagesize=\"10\" tabletype=\"checkbox\">"+
"<sql backfields=\""+backFields+"\" sqlform=\""+sqlFrom+"\" sqlprimarykey=\"id\" sqlorderby=\""+orderby+"\" sqlsortway=\"asc\" sqldistinct=\"true\" sqlwhere=\""+Util.toHtmlForSplitPage(sqlWhere)+"\"/>"+
"<head>"+
" <col width=\"35%\" text=\""+SystemEnv.getHtmlLabelName(195,user.getLanguage())+"\" column=\"wifiname\"/>"+
" <col width=\"35%\" text=\""+SystemEnv.getHtmlLabelName(32072,user.getLanguage())+"\" column=\"mac\"/>"+
" <col width=\"30%\" text=\""+SystemEnv.getHtmlLabelName(104,user.getLanguage())+"\" column=\"id\" orderkey=\"id\"/>"+
"</head>"+
"</table>";
//主要用于 显示定制列以及 表格 每页展示记录数选择
sessionKey = pageUid + "_" + Util.getEncrypt(Util.getRandom());
Util_TableMap.setVal(sessionKey, tableString);
return sessionKey;
}
/**
*
* @return
*/
public Map<String,Object> getFixedSchedulce(){
Map<String,Object> fixedSchedulce = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "";
try{
String groupid = Util.null2String(params.get("id"));
//固定班次
Map<String, Object> table = new HashMap<String, Object>();
List<Object> columns = new ArrayList<Object>();
Map<String, Object> column = null;
LinkedList<Map<String, Object>> datas = new LinkedList<Map<String, Object>>();
Map<String, Object> data = null;
ShiftManagementToolKit shiftManagementToolKit = new ShiftManagementToolKit();
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(28387, user.getLanguage()));
column.put("dataIndex", "weekday");
column.put("width", "30%");
columns.add(column);
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(388984, user.getLanguage()));
column.put("dataIndex", "serialinfo");
column.put("width", "40%");
columns.add(column);
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(104, user.getLanguage()));
column.put("dataIndex", "operate");
column.put("width", "30%");
columns.add(column);
if(groupid.length()>0){
List<Integer> lsWeeks = new ArrayList<>();
sql = " select * from kq_fixedschedulce where groupid = ? order by weekday asc ";
rs.executeQuery(sql,groupid);
while(rs.next()){
data = new HashMap<String, Object>();
data.put("id",rs.getString("id"));
data.put("weekday",UtilKQ.getWeekDay(rs.getInt("weekday"),user.getLanguage()));
data.put("serialid",rs.getString("serialid"));
data.put("serialinfo",shiftManagementToolKit.getShiftOnOffWorkSections(rs.getString("serialid"),user.getLanguage()));
datas.add(data);
lsWeeks.add(rs.getInt("weekday"));
}
//加强性修改
for(int i=0;i<7;i++){
if(!lsWeeks.contains(i)){
data = new HashMap<String, Object>();
data.put("id",i);
data.put("weekday",UtilKQ.getWeekDay(i,user.getLanguage()));
data.put("serialid","");
data.put("serialinfo",SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
datas.add(data);
}
}
}else{
for(int i=0;i<7;i++){
data = new HashMap<String, Object>();
data.put("id",i);
data.put("weekday",UtilKQ.getWeekDay(i,user.getLanguage()));
data.put("serialid","");
data.put("serialinfo",SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
datas.add(data);
}
}
fixedSchedulce.put("columns",columns);
fixedSchedulce.put("datas",datas);
}catch (Exception e){
writeLog(e);
}
return fixedSchedulce;
}
/**
*
* @return
*/
public Map<String,Object> getShiftSchedulceTable(){
Map<String,Object> shiftSchedulce = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "";
try{
String groupid = Util.null2String(params.get("id"));
//排班制
List<Object> columns = new ArrayList<Object>();
Map<String, Object> column = null;
LinkedList<Map<String, Object>> datas = new LinkedList<Map<String, Object>>();
Map<String, Object> data = null;
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(388722, user.getLanguage()));
column.put("dataIndex", "shiftcyclename");
column.put("width", "30%");
columns.add(column);
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(500480, user.getLanguage()));
column.put("dataIndex", "serial");
column.put("width", "30%");
columns.add(column);
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(500481, user.getLanguage()));
column.put("dataIndex", "shiftcycleday");
column.put("width", "20%");
columns.add(column);
column = new HashMap<String, Object>();
column.put("title", SystemEnv.getHtmlLabelName(30585, user.getLanguage()));
column.put("dataIndex", "operate");
column.put("width", "20%");
columns.add(column);
if(groupid.length()>0){
sql = " select id,shiftcyclename,shiftcycleserialids,groupid from kq_group_shiftcycle where groupid = ? order by id asc ";
rs.executeQuery(sql,groupid);
while(rs.next()){
data = new HashMap<String, Object>();
data.put("id",rs.getString("id"));
data.put("shiftcyclename",rs.getString("shiftcyclename"));
data.put("serial",rs.getString("shiftcycleserialids"));
data.put("shiftcycleday",Util.splitString(Util.null2String(rs.getString("shiftcycleserialids")),",").length);
datas.add(data);
}
}
shiftSchedulce.put("columns",columns);
shiftSchedulce.put("datas",datas);
}catch (Exception e){
writeLog(e);
}
return shiftSchedulce;
}
@Override
public BizLogContext getLogContext() {
return null;
}
}

@ -1,618 +0,0 @@
package com.engine.kq.cmd.group;
import com.alibaba.fastjson.JSON;
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.KQAutoCheckComInfo;
import com.engine.kq.biz.KQFixedSchedulceComInfo;
import com.engine.kq.biz.KQGroupComInfo;
import com.engine.kq.log.KQLog;
import weaver.conn.BatchRecordSet;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.proj.util.SQLUtil;
import weaver.systeminfo.SystemEnv;
import java.util.*;
public class SaveGroupCmd extends AbstractCommonCommand<Map<String, Object>> {
private SimpleBizLogger logger;
SimpleBizLogger.SubLogInfo subLogInfo;
SimpleBizLogger.SubLogInfo subLogInfo1;
public SaveGroupCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
if (params != null && params.containsKey("data")) {
String datas = Util.null2String(params.get("data"));
JSONObject jsonObj = JSON.parseObject(datas);
String id = Util.null2String(jsonObj.get("id"));
if(id.length()==0) {
id = "-1";
}
this.logger = new SimpleBizLogger();
BizLogContext logContext = new BizLogContext();
logContext.setDateObject(new Date());
logContext.setLogType(BizLogType.HRM_ENGINE);
logContext.setBelongType(BizLogSmallType4Hrm.HRM_ENGINE_KQGROUP);
logContext.setLogSmallType(BizLogSmallType4Hrm.HRM_ENGINE_KQGROUP);
logContext.setParams(params);
logger.setUser(user);//当前操作人
String mainSql = " select * from kq_group where id= "+id;
logger.setMainSql(mainSql);//主表sql
logger.setMainPrimarykey("id");//主日志表唯一key
logger.setMainTargetNameColumn("groupname");
subLogInfo1 = logger.getNewSubLogInfo();
String subSql1 = "select * from kq_fixedschedulce where groupid="+id;
subLogInfo1.setSubPrimarykey("id");
subLogInfo1.setSubTargetNameColumn("weekday");
subLogInfo1.setGroupId("0"); //所属分组, 按照groupid排序显示在详情中 不设置默认按照add的顺序。
subLogInfo1.setSubGroupNameLabel(505654); //在详情中显示的分组名称不设置默认显示明细x
subLogInfo1.setSubSql(subSql1);
logger.addSubLogInfo(subLogInfo1);
subLogInfo = logger.getNewSubLogInfo();
String subSql = " select * from kq_group_shiftcycle where groupid = "+id;
subLogInfo.setSubSql(subSql);
subLogInfo.setSubPrimarykey("id");
subLogInfo.setSubTargetNameColumn("shiftcyclename");
subLogInfo.setGroupId("1"); //所属分组, 按照groupid排序显示在详情中 不设置默认按照add的顺序。
subLogInfo.setSubGroupNameLabel(389225); //在详情中显示的分组名称不设置默认显示明细x
logger.addSubLogInfo(subLogInfo);
logger.before(logContext);
}
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
try{
//必要的权限判断
if(!HrmUserVarify.checkUserRight("HrmKQGroup:Add",user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
KQGroupComInfo kQGroupComInfo = new KQGroupComInfo();
KQFixedSchedulceComInfo kqFixedSchedulceComInfo = new KQFixedSchedulceComInfo();
new KQLog().info("SaveGroupCmd params:"+params);
String datas = Util.null2String(params.get("data"));
JSONObject jsonObj = JSON.parseObject(datas);
String tabKey = Util.null2String(params.get("tabKey"));//分组id
String id = Util.null2String(jsonObj.get("id"));//考勤组id
String groupname = Util.null2String(jsonObj.get("groupname"));//考勤组名称
String overtimeType = Util.null2String(jsonObj.get("overtime_type"));//加班类型
String overtimeRuleId = Util.null2String(jsonObj.get("overtime_rule_id"));//加班id
String kqtype = Util.null2String(jsonObj.get("kqtype"));//考勤类型
String subcompanyid = Util.null2String(jsonObj.get("subcompanyid"));//所属分部
String excludeid = Util.null2String(jsonObj.get("excludeid"));//考勤组排除人员
String excludecount = Util.null2String(jsonObj.get("excludecount"));//考勤组排除人员是否参与统计
String abnormalremind = Util.null2String(jsonObj.get("abnormalremind"));//考勤异常提醒
String signintype = Util.null2String(jsonObj.get("signintype"));//打卡方式
String serialids = Util.null2String(jsonObj.get("serialids"));//考勤班次
String weekday = Util.null2String(jsonObj.get("weekday"));//考勤类型
String signstart = Util.null2String(jsonObj.get("signstart"));//考勤类型
String workhour = Util.null2String(jsonObj.get("workhour"));//工作时长
String ipscope =Util.null2String( jsonObj.get("ipscope"));//应用IP范围
String calmethod = Util.null2s(Util.null2String(jsonObj.get("calmethod")),"1");//工作时长计算方式 1是打卡时间累加计算 2是打卡时间成对计算
String ipscope_v4_pc =Util.null2String( jsonObj.get("ipscope_v4_pc"));//应用IP范围 ipv4 pc端
String ipscope_v4_em =Util.null2String( jsonObj.get("ipscope_v4_em"));//应用IP范围 ipv4 移动端
String ipscope_v6_pc =Util.null2String( jsonObj.get("ipscope_v6_pc"));//应用IP范围 ipv6 pc端
String ipscope_v6_em =Util.null2String( jsonObj.get("ipscope_v6_em"));//应用IP范围 ipv6 移动端
String locationcheck = Util.null2String(jsonObj.get("locationcheck"));//启用办公地点考勤
//String locationcheckscope = Util.null2String(jsonObj.get("locationcheckscope"));//有效范围
String wificheck = Util.null2String(jsonObj.get("wificheck"));//启用wifi考勤
String outsidesign = Util.null2String(jsonObj.get("outsidesign"));//允许外勤打卡
String outsignapprove = Util.null2String(jsonObj.get("outsignapprove"));//外勤打卡需要审批
String validity = Util.null2String(jsonObj.get("validity"));//考勤组有效期
String validityfromdate = Util.null2String(jsonObj.get("validityfromdate"));//考勤组有效期开始时间
String validityenddate = Util.null2String(jsonObj.get("validityenddate"));//考勤组有效期结束时间
String locationfacecheck = Util.null2String(jsonObj.getString("locationfacecheck"));//办公地点启用人脸识别拍照打卡
String locationfacechecktype = Util.null2String(jsonObj.getString("locationfacechecktype"));//办公地点启用人脸识别拍照打卡方式
String locationshowaddress = Util.null2String(jsonObj.getString("locationshowaddress"));//有效识别半径内显示同一地址
String wififacecheck = Util.null2String(jsonObj.getString("wififacecheck"));//wifi启用人脸识别拍照打卡
String wififacechecktype = Util.null2String(jsonObj.getString("wififacechecktype"));//wifi启用人脸识别拍照打卡方式
String self_shift = Util.null2String(jsonObj.getString("self_shift"));//启用员工自我排班
String auto_checkin = Util.null2String(jsonObj.getString("auto_checkin"));//允许客户端设置自动考勤 上班卡
String auto_checkout = Util.null2String(jsonObj.getString("auto_checkout"));//允许客户端设置自动考勤 下班卡
String auto_checkin_before = Util.null2String(jsonObj.getString("auto_checkin_before"));//允许客户端设置自动考勤 上班卡开始分钟数
String auto_checkin_after = Util.null2String(jsonObj.getString("auto_checkin_after"));//允许客户端设置自动考勤 上班卡结束分钟时
String auto_checkout_before = Util.null2String(jsonObj.getString("auto_checkout_before"));//允许客户端设置自动考勤 下班卡 下班卡开始分钟数
String auto_checkout_after = Util.null2String(jsonObj.getString("auto_checkout_after"));//允许客户端设置自动考勤 下班卡 下班卡结束分钟时
String isPhotoPunchEnabled = Util.null2String(jsonObj.getString("isPhotoPunchEnabled"));//启用考勤拍照打卡
String pbcheck = Util.null2String(jsonObj.getString("pbcheck"));//启用考勤拍照打卡
if("".equals(id)) {
sql = "select * from kq_group where groupname=? and (isDelete is null or isDelete !=1) ";
rs.executeQuery(sql, groupname);
} else {
sql = "select * from kq_group where groupname=? and id != ? and (isDelete is null or isDelete !=1) ";
rs.executeQuery(sql, groupname, id);
}
if(rs.next()) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(531673, user.getLanguage()));
return retmap;
}
if("1".equalsIgnoreCase(signintype) || "3".equalsIgnoreCase(signintype)){
//如果有移动端打卡但是办公地点和wifi都没开启也把自动打卡重置
if(!"1".equalsIgnoreCase(locationcheck) && !"1".equalsIgnoreCase(wificheck)){
auto_checkin = "0";
auto_checkout = "0";
auto_checkin_before = "30";
auto_checkin_after = "30";
auto_checkout_before = "5";
auto_checkout_after = "60";
}
}else{
//如果不是移动端打卡,需要把自动打卡重置
auto_checkin = "0";
auto_checkout = "0";
auto_checkin_before = "30";
auto_checkin_after = "30";
auto_checkout_before = "5";
auto_checkout_after = "60";
}
List<Object> lsParams = new ArrayList<>();
if(tabKey.equals("1")){
if(id.length()>0) {
sql = " update kq_group set groupname=?,subcompanyid=?,excludeid=?,excludecount=?,abnormalremind=?,kqtype=?," +
" serialids=?,weekday=?,signstart=?,workhour=?,validity=?,validityfromdate=?,validityenddate=?,self_shift=?,calmethod=?,overtime_type=?,pbcheck=? " +
" where id=? ";
lsParams.add(groupname.length()==0?null:groupname);
lsParams.add(subcompanyid.length()==0?null:subcompanyid);
lsParams.add(excludeid.length()==0?null:excludeid);
lsParams.add(excludecount.length()==0?null:excludecount);
lsParams.add(abnormalremind.length()==0?null:abnormalremind);
lsParams.add(kqtype.length()==0?null:kqtype);
lsParams.add(serialids.length()==0?null:serialids);
lsParams.add(weekday.length()==0?null:weekday);
lsParams.add(signstart.length()==0?null:signstart);
lsParams.add(workhour.length()==0?null:workhour);
lsParams.add(validity.length()==0?null:validity);
lsParams.add(validityfromdate.length()==0?null:validityfromdate);
lsParams.add(validityenddate.length()==0?null:validityenddate);
lsParams.add(self_shift.length()==0?0:self_shift);
lsParams.add(calmethod.length()==0?"1":calmethod);
lsParams.add(overtimeType.length()==0?"0":overtimeType);
lsParams.add(pbcheck.length()==0?"1":pbcheck);
lsParams.add(id);
rs.executeUpdate(sql,lsParams);
if(kqtype.equals("2")){
this.saveKqTypeInfo();
}
}else {
sql = " insert into kq_group (" +
" groupname,subcompanyid,excludeid,excludecount,abnormalremind,kqtype,serialids," +
" weekday,signstart,workhour,signintype,validity,validityfromdate,validityenddate,locationcheckscope,calmethod,overtime_type,self_shift,pbcheck) " +
" values(?,?,?,?,?,?,?, ?,?,?,1,?,?,?,300,?,?,?,?)";
lsParams.add(groupname.length()==0?null:groupname);
lsParams.add(subcompanyid.length()==0?null:subcompanyid);
lsParams.add(excludeid.length()==0?null:excludeid);
lsParams.add(excludecount.length()==0?null:excludecount);
lsParams.add(abnormalremind.length()==0?null:abnormalremind);
lsParams.add(kqtype.length()==0?null:kqtype);
lsParams.add(serialids.length()==0?null:serialids);
lsParams.add(weekday.length()==0?null:weekday);
lsParams.add(signstart.length()==0?null:signstart);
lsParams.add(workhour.length()==0?null:workhour);
lsParams.add(validity.length()==0?null:validity);
lsParams.add(validityfromdate.length()==0?null:validityfromdate);
lsParams.add(validityenddate.length()==0?null:validityenddate);
lsParams.add(calmethod.length()==0?"1":calmethod);
lsParams.add(overtimeType.length()==0?"0":overtimeType);
lsParams.add(self_shift.length()==0?"0":self_shift);
lsParams.add(pbcheck.length()==0?"1":pbcheck);
rs.executeUpdate(sql,lsParams);
rs.executeQuery("select max(id) from kq_group") ;
if(rs.next()){
id = rs.getString(1);
}
}
params.put("id",id);
this.saveKqTypeInfo();
updateOverByGroupId(id,overtimeRuleId,overtimeType);
}else if(tabKey.equals("2")){
sql = " update kq_group set signintype=?, ipscope_v4_pc=?,ipscope_v4_em=?,ipscope_v6_pc=?,ipscope_v6_em=?,locationcheck=?,wificheck=?,outsidesign=?,outsignapprove=?, " +//locationcheckscope=?,
" locationfacecheck=?,locationfacechecktype=?,locationshowaddress=?,wififacecheck=?,wififacechecktype=?,auto_checkin=?,auto_checkout=?,"
+ " auto_checkin_before=?,auto_checkin_after=?,auto_checkout_before=?,auto_checkout_after=?,isPhotoPunchEnabled=? where id=? ";
lsParams.add(signintype.length()==0?null:signintype);
lsParams.add(ipscope_v4_pc.length()==0?null:ipscope_v4_pc);
lsParams.add(ipscope_v4_em.length()==0?null:ipscope_v4_em);
lsParams.add(ipscope_v6_pc.length()==0?null:ipscope_v6_pc);
lsParams.add(ipscope_v6_em.length()==0?null:ipscope_v6_em);
lsParams.add(locationcheck.length()==0?null:locationcheck);
//lsParams.add(locationcheckscope.length()==0?null:locationcheckscope);
lsParams.add(wificheck.length()==0?null:wificheck);
lsParams.add(outsidesign.length()==0?null:outsidesign);
lsParams.add(outsignapprove.length()==0?null:outsignapprove);
lsParams.add(locationfacecheck.length()==0?null:locationfacecheck);
lsParams.add(locationfacechecktype.length()==0?null:locationfacechecktype);
lsParams.add(locationshowaddress.length()==0?null:locationshowaddress);
lsParams.add(wififacecheck.length()==0?null:wififacecheck);
lsParams.add(wififacechecktype.length()==0?null:wififacechecktype);
lsParams.add(auto_checkin.length()==0?0:auto_checkin);
lsParams.add(auto_checkout.length()==0?0:auto_checkout);
lsParams.add(auto_checkin_before.length()==0?30:auto_checkin_before);
lsParams.add(auto_checkin_after.length()==0?30:auto_checkin_after);
lsParams.add(auto_checkout_before.length()==0?5:auto_checkout_before);
lsParams.add(auto_checkout_after.length()==0?60:auto_checkout_after);
lsParams.add(isPhotoPunchEnabled.length()==0?0:isPhotoPunchEnabled);
String ori_auto_checkin = kQGroupComInfo.getAuto_checkin(id);
String ori_auto_checkout = kQGroupComInfo.getAuto_checkout(id);
//关于自动打卡开启或者关闭后的一些逻辑处理
group_auto_check(id,auto_checkin,auto_checkout,ori_auto_checkin,ori_auto_checkout,retmap,kQGroupComInfo,locationcheck,wificheck,locationfacecheck,wififacecheck);
if(!retmap.isEmpty()){
return retmap;
}
lsParams.add(id);
rs.executeUpdate(sql,lsParams);
}
kQGroupComInfo.removeCache();
if(kqtype.equals("1")){
kqFixedSchedulceComInfo.removeCache();
}
String mainSql = " select * from kq_group where id= "+id;
logger.setMainSql(mainSql);//主表sql
String subSql1 = "select * from kq_fixedschedulce where groupid= "+id;
subLogInfo1.setSubSql(subSql1);
String subSql = " select * from kq_group_shiftcycle where groupid = "+id;
subLogInfo.setSubSql(subSql);
retmap.put("id", id);
retmap.put("status", "1");
retmap.put("message", SystemEnv.getHtmlLabelName(18758, user.getLanguage()));
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
/**
*
*/
private void updateOverByGroupId(String id, String overtimeRuleId, String overtimeType) {
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
if(id.length() > 0){
//更新的情况
//先根据考勤规则id查询一下原加班规则
String dbtype = rs.getDBType();
String overSql = "select * from kq_overtimerules where ','+convert(varchar(2000),groupids)+',' like ? and (isDelete is null or isDelete!=1) ";
if ("oracle".equalsIgnoreCase(dbtype)) {
overSql = "select * from kq_overtimerules where "+ SQLUtil.filteSql(rs.getDBType(), " ','+groupids+',' like ? and (isDelete is null or isDelete!=1) ");
}else if("mysql".equalsIgnoreCase(dbtype)){
overSql = "select * from kq_overtimerules where CONCAT(',',cast(groupids as char),',') like ? and (isDelete is null or isDelete!=1) ";
}else if ("postgresql".equalsIgnoreCase(dbtype)) {
overSql = "select * from kq_overtimerules where CONCAT(',',groupids,',') like ? and (isDelete is null or isDelete!=1) ";
}
rs.executeQuery(overSql,"%,"+id+",%");
String preOverId = "";
String overGroupIds = "";
if(rs.next()) {
preOverId = rs.getString("id");
String groupids = rs.getString("groupids");
if(groupids.length() > 0){
String[] groupidsArr = groupids.split(",");
if(groupidsArr.length > 0){
for (int i = 0; i < groupidsArr.length; i++) {
String gId = groupidsArr[i];
if(gId.equals(id)){
continue;
}
if(overGroupIds.length() == 0){
overGroupIds = gId;
}else{
overGroupIds += ","+gId;
}
}
}
}
}
//先把原加班规则里的当前考勤规则剔除掉
if(preOverId.length() > 0){
String updateOverSql = "update kq_overtimerules set groupids=? where id = ?";
rs1.executeUpdate(updateOverSql,overGroupIds,preOverId);
}
}else{
//新增的情况
}
//再根据传入的新的加班规则查一下有的考勤规则id
if("0".equals(overtimeType)){
//只有是考勤组关联加班规则的时候才有这个逻辑
if(overtimeRuleId.length() > 0){
String getSql = "select * from kq_overtimerules where id=?";
rs.executeQuery(getSql,overtimeRuleId);
if(rs.next()){
String groupids = Util.null2s(rs.getString("groupids"),"");
if(groupids.length() > 0){
groupids += ","+id;
}else {
groupids = id;
}
String updateOverSql = "update kq_overtimerules set groupids=? where id = ?";
rs1.executeUpdate(updateOverSql,groupids,overtimeRuleId);
}
}
}
}
/**
*
* @param id
* @param auto_checkin
* @param auto_checkout
* @param ori_auto_checkin
* @param ori_auto_checkout
* @param retmap
* @param kQGroupComInfo
* @param locationcheck
* @param wificheck
*/
public void group_auto_check(String id, String auto_checkin, String auto_checkout,
String ori_auto_checkin, String ori_auto_checkout,
Map<String, Object> retmap, KQGroupComInfo kQGroupComInfo, String locationcheck,
String wificheck, String locationfacecheck, String wififacecheck) {
KQAutoCheckComInfo kqAutoCheckComInfo = new KQAutoCheckComInfo();
RecordSet rs = new RecordSet();
if(!"1".equalsIgnoreCase(auto_checkin) && !"1".equalsIgnoreCase(auto_checkout)){
//如果自动打卡 都关闭了,那么自定义设置的也需要被清空
String del_cus_autoset = "delete from kq_autocheck_set where groupid = ? ";
rs.executeUpdate(del_cus_autoset,id);
kqAutoCheckComInfo.removeCache();
}else{
String tmp_kqtype = kQGroupComInfo.getKqtype(id);
if("3".equalsIgnoreCase(tmp_kqtype)){
//如果是弹性工作制
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(519990,user.getLanguage()));
}
boolean has_location_list = has_location_list(id);
boolean has_wifi_list = has_wifi_list(id);
if("1".equalsIgnoreCase(locationcheck)){
//地理位置的开关开启了
if("1".equalsIgnoreCase(wificheck)){
//wifi的开关开启了
if(!has_location_list && !has_wifi_list){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(519989,user.getLanguage()));
}
if("1".equalsIgnoreCase(wififacecheck)){
//如果开启了人脸打卡
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(521384,user.getLanguage()));
}
}else{
if(!has_location_list){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(519989,user.getLanguage()));
}
}
if("1".equalsIgnoreCase(locationfacecheck)){
//如果开启了人脸打卡
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(521384,user.getLanguage()));
}
}else{
//地理位置没开启
if("1".equalsIgnoreCase(wificheck)){
//wifi的开关开启了
if(!has_wifi_list){
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(519989,user.getLanguage()));
}
if("1".equalsIgnoreCase(wififacecheck)){
//如果开启了人脸打卡
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(521384,user.getLanguage()));
}
}
}
if(!ori_auto_checkin.equalsIgnoreCase(auto_checkin)){
//如果上班自动打卡变化了,需要去更新掉自定义的设置
String up_cus_autoset = "update kq_autocheck_set set auto_checkin=? where groupid = ? ";
rs.executeUpdate(up_cus_autoset, auto_checkin,id);
}
if(!ori_auto_checkout.equalsIgnoreCase(ori_auto_checkout)){
//如果下班自动打卡变化了,需要去更新掉自定义的设置
String up_cus_autoset = "update kq_autocheck_set set auto_checkout=? where groupid = ? ";
rs.executeUpdate(up_cus_autoset, auto_checkout,id);
}
kqAutoCheckComInfo.removeCache();
}
}
/**
* wifi
* @param id
* @return
*/
public boolean has_wifi_list(String id) {
RecordSet rs = new RecordSet();
String wifi_list_sql = "select 1 from kq_wifi where groupid = ? ";
rs.executeQuery(wifi_list_sql,id);
if(!rs.next()){
return false;
}
return true;
}
/**
*
* @param id
* @return
*/
public boolean has_location_list(String id) {
RecordSet rs = new RecordSet();
String location_list_sql = "select 1 from kq_location where groupid = ? ";
rs.executeQuery(location_list_sql,id);
if(!rs.next()){
return false;
}
return true;
}
private Map<String,Object> saveKqTypeInfo(){
Map<String,Object> kqTypeInfo = new HashMap<>();
RecordSet rs = new RecordSet();
BatchRecordSet batchRecordSet = new BatchRecordSet();
String sql = "";
try{
String groupid = Util.null2String(params.get("id"));
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String kqtype = Util.null2String(jsonObj.get("kqtype"));//考勤类型
if(kqtype.equals("1")){//固定班次
JSONArray fixedSchedulce = jsonObj.getJSONArray("fixedSchedulce");//固定班次明细表
if(fixedSchedulce==null || fixedSchedulce.size()>7) return kqTypeInfo;
for(int i=0;fixedSchedulce!=null&&i<fixedSchedulce.size();i++){
jsonObj = (JSONObject)fixedSchedulce.get(i);
String weekday = ""+i;//星期几
String serialid = Util.null2String(jsonObj.get("serialid"));
int id = 0;
sql = " select id from kq_fixedschedulce where weekday = ? and groupid = ? ";
rs.executeQuery(sql, weekday, groupid);
if (rs.next()) {
id = rs.getInt("id");
}
if(id>0){
sql = "update kq_fixedschedulce set serialid =? where id=? ";
rs.executeUpdate(sql,serialid.length()==0?null:serialid,id);
}else{
sql = "insert into kq_fixedschedulce(weekday,serialid,groupid) values(?,?,?)";
rs.executeUpdate(sql,weekday,serialid.length()==0?null:serialid,groupid);
}
}
}
else if(kqtype.equals("2")){//排班制
JSONArray shiftSchedulce = jsonObj.getJSONArray("shiftSchedulce");//固定班次明细表
List<String> lsDelete = new ArrayList<>();
sql = " select id from kq_group_shiftcycle where groupid = ? ";
rs.executeQuery(sql, groupid);
while(rs.next()){
lsDelete.add(rs.getString("id"));
}
List<List<Object>> paramUpdate = new ArrayList<>();
List<List<Object>> paramInsert = new ArrayList<>();
List<Object> shiftSchedulceParams = null;
for(int i=0;shiftSchedulce!=null&&i<shiftSchedulce.size();i++){
jsonObj = (JSONObject)shiftSchedulce.get(i);
String id = Util.null2String(jsonObj.get("id"));
String shiftcyclename = Util.null2String(jsonObj.get("shiftcyclename"));
String shiftcycleday = Util.null2String(jsonObj.get("shiftcycleday"));
String shiftcycleserialids = Util.null2String(jsonObj.get("serial"));
shiftSchedulceParams = new ArrayList<>();
if(id.length()>0){
shiftSchedulceParams.add(shiftcyclename);
shiftSchedulceParams.add(shiftcycleday);
shiftSchedulceParams.add(shiftcycleserialids);
shiftSchedulceParams.add(id);
paramUpdate.add(shiftSchedulceParams);
lsDelete.remove(id);
}else{
shiftSchedulceParams.add(shiftcyclename);
shiftSchedulceParams.add(shiftcycleday);
shiftSchedulceParams.add(shiftcycleserialids);
shiftSchedulceParams.add(groupid);
paramInsert.add(shiftSchedulceParams);
}
}
sql = " update kq_group_shiftcycle set shiftcyclename=?, shiftcycleday=?,shiftcycleserialids=? where id = ? ";
batchRecordSet.executeBatchSql(sql, paramUpdate);
sql = " insert into kq_group_shiftcycle (shiftcyclename, shiftcycleday, shiftcycleserialids,groupid) values (?,?,?,?)";
batchRecordSet.executeBatchSql(sql, paramInsert);
for(int i=0;i<lsDelete.size();i++) {
sql = " delete from kq_group_shiftcycle where id = ? ";
rs.executeUpdate(sql, lsDelete.get(i));
}
}
// else if(kqtype.equals("3")){//自由班制
// String weekday = Util.null2String(jsonObj.get("weekday"));//考勤类型
// String signstart = Util.null2String(jsonObj.get("signstart"));//考勤类型
// String[] weekdays = Util.splitString(weekday,",");
//
// //删除取消的星期
// sql = "delete from kq_freeschedulce where weekday not in (?) and groupid=?";
// rs.executeUpdate(sql,weekday,groupid);
//
// //更新开始时间
// sql = "update kq_freeschedulce set signstart=? where weekday in (?) and groupid=?";
// rs.executeUpdate(sql,signstart,weekday,groupid);
//
// List<List<Object>> lsParams = new ArrayList<List<Object>>();
// for(int i=0;i<weekdays.length;i++){
// sql = "select count(1) from kq_freeschedulce where weekday=? and groupid=?";
// rs.executeQuery(sql,weekdays[i],groupid);
// if(rs.next()){
// if(rs.getInt(1)<=0){
// List<Object> params = new ArrayList<Object>();
// params.add(weekdays[i]);
// params.add(signstart);
// params.add(groupid);
// lsParams.add(params);
// }
// }
// }
// if(lsParams.size()>0){
// sql = "insert into kq_freeschedulce(weekday,signstart,groupid) values(?,?,?)";
// rs.executeUpdate(sql,lsParams);
// }
// }
}catch (Exception e){
writeLog(e);
}
return kqTypeInfo;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public List<BizLogContext> getLogContexts() {
return logger.getBizLogContexts();
}
}

@ -1,238 +0,0 @@
package com.engine.kq.cmd.holidaySet;
import com.api.browser.bean.SearchConditionItem;
import com.api.browser.bean.SearchConditionOption;
import com.api.hrm.bean.HrmFieldBean;
import com.api.hrm.util.HrmFieldSearchConditionComInfo;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.KQGroupComInfo;
import weaver.conn.RecordSet;
import weaver.filter.XssUtil;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.hrm.country.CountryComInfo;
import weaver.hrm.moduledetach.ManageDetachComInfo;
import weaver.systeminfo.SystemEnv;
import weaver.systeminfo.systemright.CheckSubCompanyRight;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* --
*/
public class GetHolidaySetFormCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetHolidaySetFormCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> resultMap = new HashMap<String, Object>();
String id = Util.null2String(params.get("id"));//ID
String groupId = Util.null2String(params.get("groupId"));//考勤组的ID
String holidayDate = Util.null2String(params.get("holidayDate"));//节假日日期
String holidayDesc = "";//说明
String changeType = "1";//类型1-公众假日、2-调配工作日、3-调配休息日
String relatedDay = "";//对应工作日0-星期一、1-星期二、2-星期三、3-星期四、4-星期五、5-星期六、6-星期日
String shiftId = "";//班次ID
/*参数有误*/
if (id.equals("") && groupId.equals("")) {
resultMap.put("status", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(388858, user.getLanguage()));
return resultMap;
}
/*是否具有编辑的权限*/
boolean canEdit = HrmUserVarify.checkUserRight("KQHolidaySetEdit:Edit", user);
if (!canEdit) {
resultMap.put("status", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return resultMap;
}
List<Map<String, Object>> groupList = new ArrayList<Map<String, Object>>();
Map<String, Object> groupItem = new HashMap<String, Object>();
List<Object> itemList = new ArrayList<Object>();
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo();
SearchConditionItem searchConditionItem = null;
HrmFieldBean hrmFieldBean = null;
List<Map<String, Object>> replaceDatas = new ArrayList<Map<String, Object>>();
Map<String, Object> datas = new HashMap<String, Object>();
boolean isEdit = false;
if (!id.equals("")) {
String sql = "select * from kq_HolidaySet where id=" + id;
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(sql);
if (recordSet.next()) {
isEdit = true;
holidayDate = recordSet.getString("holidayDate");
groupId = recordSet.getString("groupId");
holidayDesc = recordSet.getString("holidayDesc");
changeType = recordSet.getString("changeType");
relatedDay = recordSet.getString("relatedDay");
shiftId = recordSet.getString("shiftId");
}
}
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("groupId");//考勤组
hrmFieldBean.setFieldlabel("390221");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("kqgroup");
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setViewAttr(1);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
replaceDatas = new ArrayList<Map<String, Object>>();
datas = new HashMap<String, Object>();
datas.put("id", groupId);
datas.put("name", kqGroupComInfo.getGroupname(groupId));
replaceDatas.add(datas);
searchConditionItem.getBrowserConditionParam().setReplaceDatas(replaceDatas);
Map<String, Object> OtherParamsMap = new HashMap<String, Object>();
OtherParamsMap.put("hasBorder", true);
searchConditionItem.setOtherParams(OtherParamsMap);
searchConditionItem.setRules("required|string");
itemList.add(searchConditionItem);
if (isEdit) {
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("holidayDate");//日期
hrmFieldBean.setFieldlabel("97");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(holidayDate);
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setViewAttr(1);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
OtherParamsMap = new HashMap<String, Object>();
OtherParamsMap.put("hasBorder", true);
searchConditionItem.setOtherParams(OtherParamsMap);
searchConditionItem.setRules("required|string");
itemList.add(searchConditionItem);
} else {
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("startDate");//开始日期
hrmFieldBean.setFieldlabel("740");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(holidayDate);
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setViewAttr(3);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
searchConditionItem.setRules("required|string");
itemList.add(searchConditionItem);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("endDate");//结束日期
hrmFieldBean.setFieldlabel("741");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setFieldvalue(holidayDate);
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setViewAttr(3);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
searchConditionItem.setRules("required|string");
itemList.add(searchConditionItem);
}
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("holidayDesc");//说明
hrmFieldBean.setFieldlabel("85");
hrmFieldBean.setFieldhtmltype("1");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(holidayDesc);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
if (hrmFieldBean.getViewAttr() == 1) {
OtherParamsMap = new HashMap<String, Object>();
OtherParamsMap.put("hasBorder", true);
searchConditionItem.setOtherParams(OtherParamsMap);
}
itemList.add(searchConditionItem);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("changeType");//类型
hrmFieldBean.setFieldlabel("132033");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(changeType);
hrmFieldBean.setIsFormField(true);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
List statusOptions = new ArrayList<SearchConditionOption>();
statusOptions.add(new SearchConditionOption("1", SystemEnv.getHtmlLabelName(16478, user.getLanguage()), changeType.equals("1")));
statusOptions.add(new SearchConditionOption("3", SystemEnv.getHtmlLabelName(16752, user.getLanguage()), changeType.equals("3")));
if (!Util.null2String(kqGroupComInfo.getKqtype(groupId)).equals("2")) {
statusOptions.add(new SearchConditionOption("2", SystemEnv.getHtmlLabelName(16751, user.getLanguage()), changeType.equals("2")));
}
searchConditionItem.setOptions(statusOptions);
searchConditionItem.setHelpfulTip(SystemEnv.getHtmlLabelName(529901, user.getLanguage()));
searchConditionItem.setDetailtype(3);
itemList.add(searchConditionItem);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("relatedDay");//对应工作日
hrmFieldBean.setFieldlabel("16754");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue(relatedDay);
hrmFieldBean.setIsFormField(true);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
statusOptions = new ArrayList<SearchConditionOption>();
statusOptions.add(new SearchConditionOption("0", SystemEnv.getHtmlLabelName(392, user.getLanguage()), relatedDay.equals("0") || relatedDay.equals("")));
statusOptions.add(new SearchConditionOption("1", SystemEnv.getHtmlLabelName(393, user.getLanguage()), relatedDay.equals("1")));
statusOptions.add(new SearchConditionOption("2", SystemEnv.getHtmlLabelName(394, user.getLanguage()), relatedDay.equals("2")));
statusOptions.add(new SearchConditionOption("3", SystemEnv.getHtmlLabelName(395, user.getLanguage()), relatedDay.equals("3")));
statusOptions.add(new SearchConditionOption("4", SystemEnv.getHtmlLabelName(396, user.getLanguage()), relatedDay.equals("4")));
statusOptions.add(new SearchConditionOption("5", SystemEnv.getHtmlLabelName(397, user.getLanguage()), relatedDay.equals("5")));
statusOptions.add(new SearchConditionOption("6", SystemEnv.getHtmlLabelName(398, user.getLanguage()), relatedDay.equals("6")));
searchConditionItem.setOptions(statusOptions);
itemList.add(searchConditionItem);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("isSync");//同步到其他考勤组
hrmFieldBean.setFieldlabel("506392");
hrmFieldBean.setFieldhtmltype("4");
hrmFieldBean.setType("1");
hrmFieldBean.setIsFormField(true);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
Map<String, Object> otherParamsMap = new HashMap<String, Object>();
otherParamsMap.put("display", "switch");
searchConditionItem.setOtherParams(otherParamsMap);
itemList.add(searchConditionItem);
// XssUtil xssUtil = new XssUtil();
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("syncGroupIds");//同步到考勤组--多选
hrmFieldBean.setFieldlabel("390664");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("mkqgroup");
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setViewAttr(3);
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
searchConditionItem.setRules("required|string");
Map<String,Object> dataMap = new HashMap<String,Object>();
// dataMap.put("sqlWhere",xssUtil.put(" kqtype!=2 "));
searchConditionItem.getBrowserConditionParam().setDataParams(dataMap);
itemList.add(searchConditionItem);
groupItem.put("items", itemList);
groupList.add(groupItem);
resultMap.put("condition", groupList);
return resultMap;
}
}

@ -1,446 +0,0 @@
package com.engine.kq.cmd.myattendance;
import com.alibaba.fastjson.JSON;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.entity.WorkTimeEntity;
import weaver.common.DateUtil;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
/**
* ----
*/
public class GetHrmKQReportInfoCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetHrmKQReportInfoCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
private static boolean isIndirectSuperId(String id,String checkSuperId,ResourceComInfo info){
int loopBreakTimes = 20 ;
for(String loopId = id;
isRightResourceId(loopId) && (loopBreakTimes--)>0 ;
loopId = info.getManagerID(loopId)){
if(isDirectSuperId(loopId,checkSuperId,info)) return true ;
}
return false ;
}
private static boolean isDirectSuperId(String id,String checkSuperId,ResourceComInfo info){
String superId = Util.null2String(info.getManagerID(id)) ;
return isRightResourceId(superId) && superId.equals(checkSuperId) ;
}
private static boolean isRightResourceId(String id){
return StringUtils.isNotBlank(id) && !"0".equals(id) ;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
ResourceComInfo resourceComInfo = new ResourceComInfo();
/**
*
*/
int subCompanyId = Util.getIntValue((String) params.get("subCompanyId"), 0);
int departmentId = Util.getIntValue((String) params.get("departmentId"), 0);
String resourceId = Util.null2String(params.get("resourceId"));
if (resourceId.equals("")) {
resourceId = "" + user.getUID();
}
String lastName = resourceComInfo.getResourcename(resourceId);
if (resourceId.equals("" + user.getUID())) {
resultMap.put("title", SystemEnv.getHtmlLabelName(513095, user.getLanguage()));
} else {
resultMap.put("title", SystemEnv.getHtmlLabelName(515562, user.getLanguage()).replace("{name}", lastName));
}
if (subCompanyId == 0 || departmentId == 0) {
subCompanyId = Util.getIntValue(resourceComInfo.getSubCompanyID(resourceId), 0);
departmentId = Util.getIntValue(resourceComInfo.getDepartmentID(resourceId), 0);
}
if (!resourceId.equals("" + user.getUID()) && !isIndirectSuperId(resourceId, user.getUID() + "", resourceComInfo) && !HrmUserVarify.checkUserRight("HrmResource:Absense", user, departmentId)) {
resultMap.put("status", "-1");
resultMap.put("hasRight", false);
return resultMap;
}
String fromDate = Util.null2String(params.get("fromDate"));
String toDate = Util.null2String(params.get("toDate"));
// 没有权限的人最大只支持查询本季
Map<String, String> getRealDate = new KQReportBiz().realDate(fromDate, toDate, user, "1");
String realFromDate = getRealDate.get("fromDate");
String realToDate = getRealDate.get("toDate");
if("-1".equals(realFromDate) || "-1".equals(realToDate)) {
resultMap.put("status", "-1");
resultMap.put("message", SystemEnv.getHtmlLabelName(543747, user.getLanguage()));
return resultMap;
}
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 lastYearDate = Util.add0(today.get(Calendar.YEAR) - 1, 4) + "-12-31";
String currentYear = currentDate.substring(0,4);
String balanceDate = currentDate;
String typevalue = Util.null2String(params.get("typevalue"));//指定的年份或者指定的月份
String type = Util.null2String(params.get("type"));//是查看一年的数据还是一月的数据1-年、2-月
if (type.equals("1")) {//年
if (typevalue.length() == 0 || typevalue.length() != 4) {
typevalue = DateUtil.getYear();
}
if(typevalue.compareTo(currentYear)<0){
balanceDate = typevalue + "-12-31";
}else if(typevalue.compareTo(currentYear)==0){
balanceDate = currentDate;
}else if(typevalue.compareTo(currentYear)>0){
balanceDate = typevalue + "-01-01";
}
} else if (type.equals("2")) {//月
if (typevalue.length() == 0) {
typevalue = DateUtil.getYear() + "-" + DateUtil.getMonth();
}
balanceDate = typevalue + "-01";
}
/**
*
*/
Map<String, Object> groupMap = new HashMap<String, Object>();
List<Object> groupItemList = new ArrayList<Object>();
Map<String, Object> groupItem = new HashMap<String, Object>();
List<Object> itemList = new ArrayList<Object>();
Map<String, Object> itemMap = new HashMap<String, Object>();
List<Object> itemList5 = new ArrayList<Object>();
Map<String, Object> groupItem5 = new HashMap<String, Object>();
/**
*
* workDays
* realWorkDays
* leaveDays
*/
double workDays = 0.00;
double realWorkDays = 0.00;
double leaveDays = 0.00;
/**
* beLate
* graveBeLate
* leaveEearly退
* graveLeaveEarly
* absenteeism
* forgotCheck
*/
int beLate = 0;
int graveBeLate = 0;
int leaveEearly = 0;
int graveLeaveEarly = 0;
int absenteeism = 0;
int forgotCheck = 0;
/**
* or_minimumUnit
* or_unitName()/()
* tr_minimumUnit
* tr_unitName()/()
* er_minimumUnit
* er_unitName()/()
*/
int or_minimumUnit = KQOvertimeRulesBiz.getMinimumUnit();//最小加班单位
String or_unitName = (or_minimumUnit == 3 || or_minimumUnit == 5 || or_minimumUnit == 6) ? SystemEnv.getHtmlLabelName(389326, user.getLanguage()) : SystemEnv.getHtmlLabelName(389325, user.getLanguage());
KQTravelRulesComInfo kqTravelRulesComInfo = new KQTravelRulesComInfo();
int tr_minimumUnit = Util.getIntValue(kqTravelRulesComInfo.getMinimumUnit("1"));//最小出差单位
String tr_unitName = tr_minimumUnit == 3 ? SystemEnv.getHtmlLabelName(389326, user.getLanguage()) : SystemEnv.getHtmlLabelName(389325, user.getLanguage());
KQExitRulesComInfo kqExitRulesComInfo = new KQExitRulesComInfo();
int er_minimumUnit = Util.getIntValue(kqExitRulesComInfo.getMinimumUnit("1"));//最小公出单位
String er_unitName = er_minimumUnit == 3 ? SystemEnv.getHtmlLabelName(389326, user.getLanguage()) : SystemEnv.getHtmlLabelName(389325, user.getLanguage());
/**
* overtimeTotal
* businessLeave
* officialBusiness
*/
double overtimeTotal = 0.00;//加班时长
double businessLeave = 0.00;//出差时长
double officialBusiness = 0.00;//公出时长
/**
* ()
*/
KQLeaveRulesComInfo rulesComInfo = new KQLeaveRulesComInfo();
Map<String, Object> leaveMap = new HashMap<String, Object>();
/**
* service
* com/engine/kq/cmd/report/GetKQReportCmd.java
*/
List<Map<String, Object>> datasList = new ArrayList<Map<String, Object>>();
Map<String, Object> datasMap = new HashMap<>();
datasList = (List<Map<String, Object>>) params.get("datas");
boolean isKqReportHalfOpen = "1".equals(new KQSettingsComInfo().getMain_val("kq_report_half"));
for (int i = 0; datasList != null && i < datasList.size(); i++) {
datasMap = (Map<String, Object>) datasList.get(i);
//String rowSpan = Util.null2String(datasMap.get("rowSpan"));
//if ("2".equalsIgnoreCase(rowSpan)) {
// 如果是开启了半天开关,那么就不可能是一天多次上下班,所以这里直接显示第一次结果就行了
if(isKqReportHalfOpen && i>0) {
break;
}
workDays += Util.getDoubleValue((String) datasMap.get("workdays"), 0.00);//应出勤天数
realWorkDays += Util.getDoubleValue((String) datasMap.get("attendancedays"), 0.00);//实际出勤天数
leaveDays = workDays - realWorkDays;//缺勤天数
beLate += Util.getIntValue((String) datasMap.get("beLate"), 0);//迟到次数
graveBeLate += Util.getIntValue((String) datasMap.get("graveBeLate"), 0);//严重迟到次数
leaveEearly += Util.getIntValue((String) datasMap.get("leaveEearly"), 0);//早退次数
graveLeaveEarly += Util.getIntValue((String) datasMap.get("graveLeaveEarly"), 0);//严重迟到次数
absenteeism += Util.getIntValue((String) datasMap.get("absenteeism"), 0);//旷工次数
forgotCheck += Util.getIntValue((String) datasMap.get("forgotCheck"), 0);//漏签次数
overtimeTotal += Util.getDoubleValue((String) datasMap.get("overtimeTotal"), 0.00);//加班时长
businessLeave += Util.getDoubleValue((String) datasMap.get("businessLeave"), 0.00);//出差时长
officialBusiness += Util.getDoubleValue((String) datasMap.get("officialBusiness"), 0.00);//公出时长
rulesComInfo.setTofirstRow();
while (i == 0 && rulesComInfo.next()) {
double value = Util.getDoubleValue(String.valueOf(leaveMap.get("leaveType_" + rulesComInfo.getId())), 0.00);
value += Util.getDoubleValue((String) datasMap.get("leaveType_" + rulesComInfo.getId()), 0.00);//请假时长
leaveMap.put("leaveType_" + rulesComInfo.getId(), value);
}
//}
}
/**统计应出勤天数*/
KQWorkTime kqWorkTime = new KQWorkTime();
if (!toDate.equals("") && toDate.compareTo(currentDate) > 0 && Util.getIntValue(resourceComInfo.getStatus(resourceId), 0) < 4) {
workDays = 0.00;
if (!fromDate.equals("") && fromDate.compareTo(currentDate) > 0) {
//查询没有到的月份缺勤天数以及出勤天数应该都为0
realWorkDays = 0.00;
leaveDays = 0.00;
}
boolean isEnd = false;
for (String date = fromDate; !isEnd; ) {
if (date.compareTo(toDate)>=0) {
isEnd = true;
}
WorkTimeEntity workTimeEntity = kqWorkTime.getWorkTime(resourceId, date);
String dayType = workTimeEntity.getDayType();
String convertAttendDay = Util.null2s(workTimeEntity.getConvertAttendDay(),"1.0");
boolean isWorkDay = "work".equalsIgnoreCase(dayType);
if (isWorkDay) {
workDays += (1.00*Util.getDoubleValue(convertAttendDay, 1.0));
}
date = DateUtil.getDate(date, 1);
}
}
/**********************************************************************************************************/
itemList = new ArrayList<Object>();
itemMap = new HashMap<String, Object>();
itemMap.put("id", "leaveDays");
itemMap.put("name", SystemEnv.getHtmlLabelName(506345, user.getLanguage()));//未出勤
itemMap.put("title", SystemEnv.getHtmlLabelName(506345, user.getLanguage()));
itemMap.put("type", "ABSENT");
itemMap.put("value", String.format("%.2f", leaveDays));
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("id", "realWorkDays");
itemMap.put("name", SystemEnv.getHtmlLabelName(130566, user.getLanguage()));//实际出勤
itemMap.put("title", SystemEnv.getHtmlLabelName(130566, user.getLanguage()));
itemMap.put("type", "REALWORKDAYS");
itemMap.put("value", String.format("%.2f", realWorkDays));
itemList.add(itemMap);
groupItem = new HashMap<String, Object>();
groupItem.put("id", "workDays");
groupItem.put("name", SystemEnv.getHtmlLabelName(513089, user.getLanguage()));//应出勤(天)
groupItem.put("title", SystemEnv.getHtmlLabelName(16732, user.getLanguage()));
groupItem.put("value", String.format("%.2f", workDays));
groupItem.put("items", itemList);
resultMap.put("groupitem1", groupItem);
/**********************************************************************************************************/
itemList = new ArrayList<Object>();
itemMap = new HashMap<String, Object>();
itemMap.put("name", "evection");
itemMap.put("title", SystemEnv.getHtmlLabelName(20084, user.getLanguage()) + tr_unitName);//出差
itemMap.put("type", "EVECTION");
itemMap.put("value", String.format("%.2f",businessLeave));
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "outDays");
itemMap.put("title", SystemEnv.getHtmlLabelName(24058, user.getLanguage()) + er_unitName);//公出
itemMap.put("type", "OUTDAYS");
itemMap.put("value",String.format("%.2f",officialBusiness));
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "overTimes");
itemMap.put("title", SystemEnv.getHtmlLabelName(6151, user.getLanguage()) + or_unitName);//加班
itemMap.put("type", "OVERTIME");
itemMap.put("value", String.format("%.2f",overtimeTotal));
itemList.add(itemMap);
groupItem = new HashMap<String, Object>();
groupItem.put("items", itemList);
resultMap.put("groupitem2", groupItem);
/**********************************************************************************************************/
itemList = new ArrayList<Object>();
itemMap = new HashMap<String, Object>();
itemMap.put("name", "beLate");
itemMap.put("title", SystemEnv.getHtmlLabelName(34089, user.getLanguage()));//迟到
itemMap.put("type", "BELATE");
itemMap.put("value", beLate);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "graveBeLate");
itemMap.put("title", SystemEnv.getHtmlLabelName(535131, user.getLanguage()));//严重迟到
itemMap.put("type", "graveBeLate");
itemMap.put("value", graveBeLate);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "leaveEarly");
itemMap.put("title", SystemEnv.getHtmlLabelName(34098, user.getLanguage()));//早退
itemMap.put("type", "LEAVEEARLY");
itemMap.put("value", leaveEearly);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "graveLeaveEarly");
itemMap.put("title", SystemEnv.getHtmlLabelName(535132, user.getLanguage()));//严重早退
itemMap.put("type", "graveLeaveEarly");
itemMap.put("value", graveLeaveEarly);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "absentFromWork");
itemMap.put("title", SystemEnv.getHtmlLabelName(10000344, user.getLanguage()));//旷工
itemMap.put("type", "ABSENT");
itemMap.put("value", absenteeism);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("name", "noSign");
itemMap.put("title", SystemEnv.getHtmlLabelName(34099, user.getLanguage()));//漏签
itemMap.put("type", "noSign");
itemMap.put("value", forgotCheck);
itemList.add(itemMap);
groupItem = new HashMap<String, Object>();
groupItem.put("items", itemList);
resultMap.put("groupitem3", groupItem);
/**********************************************************************************************************/
rulesComInfo.setTofirstRow();
while (rulesComInfo.next()) {
if (!rulesComInfo.getIsEnable().equals("1") || !rulesComInfo.getBalanceEnable().equals("1")) {
continue;
}
// writeLog("lxr2018>.resourceId="+resourceId+
// ";getScopeType="+rulesComInfo.getScopeType()+
// ";getScopeValue="+rulesComInfo.getScopeValue());
boolean flag = KQLeaveRulesBiz.filterSubLeaveRule(resourceId, rulesComInfo.getScopeType(), rulesComInfo.getScopeValue(), subCompanyId+"", departmentId+"");
if (flag) {
continue;
}
// writeLog("lxr2018>.flag="+flag);
String allRestAmount = KQBalanceOfLeaveBiz.getRestAmount("" + resourceId, rulesComInfo.getId(), balanceDate, true, true);
String currentRestAmount = KQBalanceOfLeaveBiz.getRestAmount("" + resourceId, rulesComInfo.getId(), balanceDate, true, false);
String beforeRestAmount = String.format("%.2f", Util.getDoubleValue(allRestAmount, 0) - Util.getDoubleValue(currentRestAmount, 0));
itemList = new ArrayList<Object>();
if(KQSettingsBiz.show_split_balance()) {
itemMap = new HashMap<String, Object>();
itemMap.put("title", (KQUnitBiz.isLeaveHour(rulesComInfo.getMinimumUnit())) ? SystemEnv.getHtmlLabelName(513286, user.getLanguage()) : SystemEnv.getHtmlLabelName(513287, user.getLanguage()));
itemMap.put("value", beforeRestAmount);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("title", (KQUnitBiz.isLeaveHour(rulesComInfo.getMinimumUnit())) ? SystemEnv.getHtmlLabelName(504395, user.getLanguage()) : SystemEnv.getHtmlLabelName(504394, user.getLanguage()));
itemMap.put("value", currentRestAmount);
itemList.add(itemMap);
itemMap = new HashMap<String, Object>();
itemMap.put("title", (KQUnitBiz.isLeaveHour(rulesComInfo.getMinimumUnit())) ? SystemEnv.getHtmlLabelName(513288, user.getLanguage()) : SystemEnv.getHtmlLabelName(513289, user.getLanguage()));
itemMap.put("value", allRestAmount);
itemList.add(itemMap);
}else{
itemMap = new HashMap<String, Object>();
itemMap.put("title", (KQUnitBiz.isLeaveHour(rulesComInfo.getMinimumUnit())) ? SystemEnv.getHtmlLabelName(513288, user.getLanguage()) : SystemEnv.getHtmlLabelName(513289, user.getLanguage()));
itemMap.put("value", allRestAmount);
itemList.add(itemMap);
}
groupItem = new HashMap<String, Object>();
groupItem.put("color", "#25C6DA");
groupItem.put("icon", "icon-Human-resources-adjustment");
groupItem.put("title", rulesComInfo.getLeaveName());
groupItem.put("item", itemList);
groupItemList.add(groupItem);
}
groupMap.put("items", groupItemList);
groupMap.put("title", SystemEnv.getHtmlLabelName(132058, user.getLanguage()));
resultMap.put("groupitem4", groupMap);
/**********************************************************************************************************/
rulesComInfo.setTofirstRow();
while (rulesComInfo.next()) {
boolean flag = KQLeaveRulesBiz.filterSubLeaveRule(resourceId, rulesComInfo.getScopeType(), rulesComInfo.getScopeValue(), subCompanyId+"", departmentId+"");
if (flag) {
continue;
}
double value = Util.getDoubleValue(String.valueOf(leaveMap.get("leaveType_" + rulesComInfo.getId())), 0.00);//请假时长
if (value > 0) {
String leaveName = Util.formatMultiLang(rulesComInfo.getLeaveName(), "" + user.getLanguage());
int le_minimumUnit = Util.getIntValue(rulesComInfo.getMinimumUnit(), 1);//最小请假单位
String le_unitName = (le_minimumUnit == 3 || le_minimumUnit == 5 || le_minimumUnit == 6) ? SystemEnv.getHtmlLabelName(389326, user.getLanguage()) : SystemEnv.getHtmlLabelName(389325, user.getLanguage());
itemMap = new HashMap<String, Object>();
itemMap.put("name", "leaveType_" + rulesComInfo.getId());
itemMap.put("title", leaveName + le_unitName);
itemMap.put("type", "leaveType_" + rulesComInfo.getId());
itemMap.put("value", Util.toDecimalDigits("" + value, 2));
itemList5.add(itemMap);
}
}
groupItem5.put("items", itemList5);
resultMap.put("groupitem5", groupItem5);
resultMap.put("status", "1");
} catch (Exception e) {
writeLog(e);
}
return resultMap;
}
}

@ -1,718 +0,0 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit;
import com.engine.kq.util.ExcelUtil;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.xmgsecond.util.KqCalulateUtil;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;
public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
private HttpServletRequest request;
private HttpServletResponse response;
private List<String> lsFieldDataKey;
public ExportDailyExcelCmd(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response, User user) {
this.user = user;
this.params = params;
this.request = request;
this.response = response;
this.lsFieldDataKey = new ArrayList<>();
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
try {
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
ShiftManagementToolKit shiftManagementToolKit = new ShiftManagementToolKit();
KQWorkTime kqWorkTime = new KQWorkTime();
KQReportBiz kqReportBiz = new KQReportBiz();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String leavetype_is_on = Util.null2String(kqSettingsComInfo.getMain_val("leavetype_is_on"),"0");
new KQReportBiz().insertKqReportExportLog(params, user);
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String attendanceSerial = Util.null2String(jsonObj.get("attendanceSerial"));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect =Util.null2String(jsonObj.get("typeselect"));
if(typeselect.length()==0)typeselect = "3";
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
if(typeselect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeselect,"0");
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
List<String> showColumns = Util.splitString2List(Util.null2String(jsonObj.get("showColumns")),",");
showColumns.add("lastname");
showColumns.add("kqdate");
showColumns.add("serialid");
showColumns.removeIf(showColumn->showColumn.trim().equals(""));
List<String> tmpShowColumns = new ArrayList<>();
for(String showColumn:showColumns){
tmpShowColumns.add(showColumn);
String cascadekey = "";
if(showColumn.equals("signin1")){
cascadekey = "signout1";
}else if(showColumn.equals("signin2")){
cascadekey = "signout2";
}else if(showColumn.equals("signin3")){
cascadekey = "signout3";
}else if(showColumn.equals("beLate")){
cascadekey = "beLateMins";
}else if(showColumn.equals("leaveEearly")){
cascadekey = "leaveEarlyMins";
}else if(showColumn.equals("graveBeLate")){
cascadekey = "graveBeLateMins";
}else if(showColumn.equals("graveLeaveEarly")){
cascadekey = "graveLeaveEarlyMins";
}else if(showColumn.equals("absenteeism")){
cascadekey = "absenteeismMins";
}else if(showColumn.equals("overtime")){
tmpShowColumns.add("overtime_4leave");
tmpShowColumns.add("overtime_nonleave");
tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("workingDayOvertime_4leave");
tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_nonleave");
}
if(cascadekey.length()>0){
tmpShowColumns.add(cascadekey);
}
}
showColumns = tmpShowColumns;
String today = DateUtil.getCurrentDate();
if(DateUtil.compDate(today, toDate)>0){//结束如期不大于今天
toDate = today;
}
String rightSql = new KQReportBiz().getReportRight("2",""+user.getUID(),"a");
LinkedHashMap<String, Object> workbook = new LinkedHashMap<>();
List<Object> lsSheet = new ArrayList<>();
Map<String, Object> sheet = null;
List<Object> titleList = new ArrayList<>();
Map<String,Object> title = null;
List<List<Object>> dataList = new ArrayList<>();
List<Object> data = null;
List<Map<String,Object>> constraintList = null;
Map<String,Object> constraint = null;
sheet = new HashMap<>();
sheet.put("sheetName", SystemEnv.getHtmlLabelName( 390352, user.getLanguage()));
sheet.put("sheetTitle", SystemEnv.getHtmlLabelName( 390352, user.getLanguage()));
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String,Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(Util.null2String(kqReportFieldComInfo.getParentid()).length()>0)continue;
if(!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("daily"))continue;
if (!showColumns.contains(kqReportFieldComInfo.getFieldname())&&!showColumns.contains(kqReportFieldComInfo.getParentid())) continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
title = new HashMap<>();
String unitType = KQReportBiz.getUnitType(kqReportFieldComInfo, user);
if(unitType.length()>0){
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())+ "(" + unitType + ")");
}else{
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
}
title.put("width",30*256);
this.lsFieldDataKey.add(kqReportFieldComInfo.getFieldname());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(),user);
childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan",childColumns.size());
}else{
title.put("rowSpan", 3);
}
titleList.add(title);
}
sheet.put("titleList", titleList);
// 没有权限的人最大只支持查询本季
Map<String, String> getRealDate = new KQReportBiz().realDate(fromDate, toDate, user, "2");
fromDate = getRealDate.get("fromDate");
toDate = getRealDate.get("toDate");
if("-1".equals(fromDate) || "-1".equals(toDate)) {
retmap.put("status", "1");
return retmap;
}
List<List> paramLists = new ArrayList<>();
List<Object> paramList = null;
String forgotBeginWorkCheck_field = " b.forgotbeginworkcheck ";
if(rs.getDBType().equalsIgnoreCase("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")) {
forgotBeginWorkCheck_field = " nvl(b.forgotBeginWorkCheck,0) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " ifnull(b.forgotBeginWorkCheck,0) ";
}else {
forgotBeginWorkCheck_field = " isnull(b.forgotBeginWorkCheck,0) ";
}
String backFields = " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins,b.beLate," +
" b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins,b.graveLeaveEarly," +
" b.graveLeaveEarlyMins,b.absenteeism,b.signdays,b.signmins, "+
" b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql;
if(subCompanyId.length()>0){
sqlWhere +=" and a.subcompanyid1 in("+KQReportBiz.splitParamStr(subCompanyId)+") ";
for(String bean : subCompanyId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+KQReportBiz.splitParamStr(departmentId)+") ";
for(String bean : departmentId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if(resourceId.length()>0){
sqlWhere +=" and a.id in("+KQReportBiz.splitParamStr(resourceId)+") ";
for(String bean : resourceId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = ?";
paramList = new ArrayList<>();
paramList.add(status);
paramLists.add(paramList);
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
String orderBy = " order by a.dsporder asc, a.lastname asc , b.kqDate asc ";
String descOrderBy = " order by a.dsporder desc, a.lastname desc ";
sql = "select "+backFields + sqlFrom + sqlWhere+orderBy;
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
String fullPathMainKey = "show_full_path";
String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0");
Map<String,String> serialdata = new HashMap<>();
boolean isneedcal = KQSettingsBiz.getKqformatAccurate();
params.put("isneedcal",isneedcal?"1":"0");
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
rs.executeQuery(sql, paramLists);
while (rs.next()) {
data = new ArrayList<>();
String id = rs.getString("id");
String kqdate = rs.getString("kqdate");
String tmpkey = id+"|"+kqdate+"|";
// Map<String,Object> signDetailInfo = this.getSignDetailInfo(id,kqdate);
for (int fieldDataKeyIdx =0;fieldDataKeyIdx<lsFieldDataKey.size();fieldDataKeyIdx++) {
String fieldName = lsFieldDataKey.get(fieldDataKeyIdx);
String fieldid = KQReportFieldComInfo.field2Id.get(fieldName);
String fieldValue = "";
if(fieldName.equals("subcompany")){
String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid"));
if(tmpSubcompanyId.length()==0){
tmpSubcompanyId = Util.null2String(resourceComInfo.getSubCompanyID(id));
}
fieldValue = "1".equals(isShowFullPath) ?
SubCompanyComInfo.getSubcompanyRealPath(tmpSubcompanyId, "/", "0") :
subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
// fieldValue = subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
}else if(fieldName.equals("department")){
String tmpDepartmentId = Util.null2String(rs.getString("departmentid"));
if(tmpDepartmentId.length()==0){
tmpDepartmentId = Util.null2String(resourceComInfo.getDepartmentID(id));
}
fieldValue = "1".equals(isShowFullPath) ?
departmentComInfo.getDepartmentRealPath(tmpDepartmentId, "/", "0") :
departmentComInfo.getDepartmentname(tmpDepartmentId);
// fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
}else if(fieldName.equals("jobtitle")){
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if(tmpJobtitleId.length()==0){
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
}
fieldValue = jobTitlesComInfo.getJobTitlesname(tmpJobtitleId);
}else if("kqGroup".equals(fieldName)){
//QC3685035 每日考勤报表增加所属所属考勤组
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(id, kqdate);
fieldValue = kqGroupComInfo.getGroupname(groupId);
}else if("nigntWork".equals(fieldName)){
//QC3685035 每日考勤报表增加夜班次数
fieldValue = String.valueOf(KqCalulateUtil.nightWorkSums(id,kqdate,kqdate));
} else if(fieldName.equals("serialid")){
String serialid = Util.null2String(rs.getString("serialid"));
if(serialid.length()>0){
// fieldValue = Util.formatMultiLang(shiftManagementToolKit.getShiftOnOffWorkSections(serialid, user.getLanguage()));
if(null != serialdata && serialdata.containsKey(serialid)){
fieldValue = serialdata.get(serialid);
}else{
String tmpserialname = Util.formatMultiLang(shiftManagementToolKit.getShiftOnOffWorkSections(serialid, user.getLanguage()));
fieldValue = tmpserialname;
serialdata.put(serialid,tmpserialname);
}
}
} else if(fieldName.equals("signin1")){
fieldValue = Util.null2String(flowData.get(tmpkey+"signintime1"));
data.add(fieldValue);
fieldValue = Util.null2String(flowData.get(tmpkey+"signinstatus1"));
data.add(fieldValue);
continue;
} else if(fieldName.equals("signin2")){
fieldValue = Util.null2String(flowData.get(tmpkey+"signintime2"));
data.add(fieldValue);
fieldValue = Util.null2String(flowData.get(tmpkey+"signinstatus2"));
data.add(fieldValue);
continue;
} else if(fieldName.equals("signin3")){
fieldValue = Util.null2String(flowData.get(tmpkey+"signintime3"));
data.add(fieldValue);
fieldValue = Util.null2String(flowData.get(tmpkey+"signinstatus3"));
data.add(fieldValue);
continue;
} else if(fieldName.equals("signout1")){
fieldValue = Util.null2String(flowData.get(tmpkey+"signouttime1"));
data.add(fieldValue);
fieldValue = Util.null2String(flowData.get(tmpkey+"signoutstatus1"));
data.add(fieldValue);
continue;
} else if(fieldName.equals("signout2")){
fieldValue = Util.null2String(flowData.get(tmpkey+"signouttime2"));
data.add(fieldValue);
fieldValue = Util.null2String(flowData.get(tmpkey+"signoutstatus2"));
data.add(fieldValue);
continue;
} else if(fieldName.equals("signout3")){
fieldValue = Util.null2String(flowData.get(tmpkey+"signouttime3"));
data.add(fieldValue);
fieldValue = Util.null2String(flowData.get(tmpkey+"signoutstatus3"));
data.add(fieldValue);
continue;
} else if(fieldName.equals("leave")){
//请假
List<Map<String, Object>> allLeaveRules = KQLeaveRulesBiz.getAllLeaveRules();
if (("1").equals(leavetype_is_on)) {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
for (int i = allLeaveRules.size() - 1; i >= 0; i--) {
Map<String, Object> leaveRule = allLeaveRules.get(i);
String leaveId = Util.null2String(leaveRule.get("id"));
boolean flag = KQLeaveRulesBiz.filterSubLeaveRule(kqLeaveRulesComInfo, user, leaveId);
if (flag) {
allLeaveRules.remove(i);
}
}
}
Map<String, Object> leaveRule = null;
for(int i=0;allLeaveRules!=null&&i<allLeaveRules.size();i++){
leaveRule = (Map<String, Object>)allLeaveRules.get(i);
String flowType = Util.null2String("leaveType_"+leaveRule.get("id"));
fieldValue = Util.null2String(flowData.get(id+"|"+kqdate+"|"+flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + kqdate + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (fieldValue.length() == 0) {
fieldValue = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(fieldValue);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
writeLog("ExportDailyExcelCmd:fieldValue" + fieldValue + ":leavebackData:" + leavebackData + ":" + e);
}
//考虑下冻结的数据
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(fieldValue, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
fieldValue = flowLeaveData;
data.add(fieldValue);
}
}else if(fieldName.equals("overtime")){
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|workingDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|restDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|holidayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|workingDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|restDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|holidayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_4leave"))));
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|"+kqdate+"|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave<0?0:workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|"+kqdate+"|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave<0?0:restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|"+kqdate+"|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|"+kqdate+"|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|"+kqdate+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|"+kqdate+"|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave+restDayOvertime_4leave+holidayOvertime_4leave+
workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("overtimeTotal"))));
continue;
}else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
String businessLeaveData = Util.null2s(Util.null2String(flowData.get(id+"|"+kqdate+"|"+fieldName)),"0.0");
String backType = fieldName+"_back";
String businessLeavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+kqdate+"|"+backType)),"0.0");
String businessLeave = "";
try{
//以防止出现精度问题
if(businessLeaveData.length() == 0){
businessLeaveData = "0.0";
}
if(businessLeavebackData.length() == 0){
businessLeavebackData = "0.0";
}
BigDecimal b_businessLeaveData = new BigDecimal(businessLeaveData);
BigDecimal b_businessLeavebackData = new BigDecimal(businessLeavebackData);
businessLeave = b_businessLeaveData.subtract(b_businessLeavebackData).toString();
if(Util.getDoubleValue(businessLeave, -1) < 0){
businessLeave = "0.0";
}
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
}else if(fieldName.equals("kqdate")){
fieldValue=kqdate+" "+com.engine.portal.util.DateUtil.getDayWeekOfDate1(DateUtil.parseToDate(kqdate));
} else {
fieldValue = Util.null2String(rs.getString(fieldName));
fieldValue = getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(fieldid));
}
if(!fieldName.equals("leave")) {
fieldValue = Util.formatMultiLang(fieldValue, "" + user.getLanguage());
data.add(fieldValue);
}
}
dataList.add(data);
}
sheet.put("dataList", dataList);
sheet.put("constraintList",constraintList);
sheet.put("createFile", "1");
lsSheet.add(sheet);
workbook.put("sheet", lsSheet);
String fileName = SystemEnv.getHtmlLabelName(390352, user.getLanguage())+" "+fromDate+" "+toDate;;
workbook.put("fileName", fileName);
ExcelUtil ExcelUtil = new ExcelUtil();
Map<String,Object> exportMap= ExcelUtil.export(workbook,request,response);
retmap.putAll(exportMap);
retmap.put("status", "1");
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
writeLog(e);
}
return retmap;
}
private Map<String,Object> getChildColumnsInfo(String parentid, User user){
Map<String,Object> returnMap = new HashMap<>();
List<Object> titleList = new ArrayList<>();
Map<String,Object> title = null;
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String leavetype_is_on = Util.null2String(kqSettingsComInfo.getMain_val("leavetype_is_on"),"0");
if(parentid.equals("leave")){
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
if (("1").equals(leavetype_is_on)) {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
for (int i = leaveRules.size() - 1; i >= 0; i--) {
Map<String, Object> leaveRule = leaveRules.get(i);
String leaveId = Util.null2String(leaveRule.get("id"));
boolean flag = kqLeaveRulesBiz.filterSubLeaveRule(kqLeaveRulesComInfo, user, leaveId);
if (flag) {
leaveRules.remove(i);
}
}
}
for(int i=0;leaveRules!=null&&i<leaveRules.size();i++){
Map<String, Object> leaveRule = leaveRules.get(i);
String name = Util.formatMultiLang(Util.null2String(leaveRule.get("name")),""+user.getLanguage());
String unitType = Util.null2String(leaveRule.get("unitType"));
title = new HashMap<>();
title.put("title",name+"("+
((KQUnitBiz.isLeaveHour(unitType))?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage()))+")");
title.put("width",30*256);
titleList.add(title);
}
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
title = new HashMap();
String fieldlabel = "";
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else{
fieldlabel = "523";
title.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())+ "(" + unitTypeName + ")");
}
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
title.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
title.put("width", childWidth+"");
titleList.add(title);
}
} else{
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("daily"))continue;
title = new HashMap<>();
title.put("title",SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())+
(KQReportBiz.getUnitType(kqReportFieldComInfo, user).length()>0?"("+ KQReportBiz.getUnitType(kqReportFieldComInfo, user)+")":""));
title.put("width",30*256);
titleList.add(title);
}
}
}
returnMap.put("childColumns",titleList);
return returnMap;
}
public Map<String, Object> getSignDetailInfo(String resourceId, String kqDate){
Map<String, Object> data = new HashMap<>();
Map<String,Object> signStatusInfo = null;
RecordSet rs = new RecordSet();
String sql = "";
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
try{
sql = " select kqdate,resourceid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
" leaveMins,leaveInfo,evectionMins,outMins,signinid,signoutid \n" +
" from kq_format_detail b \n" +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
rs.execute(sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
String serialid = Util.null2String(rs.getString("serialid"));
int serialnumber = rs.getInt("serialnumber")+1;
String workbegindate = Util.null2String(rs.getString("workbegindate")).trim();
String workbegintime = Util.null2String(rs.getString("workbegintime")).trim();
String workenddate = Util.null2String(rs.getString("workenddate")).trim();
String workendtime = Util.null2String(rs.getString("workendtime")).trim();
int workMins = rs.getInt("workMins");
String signintime = Util.null2String(rs.getString("signintime")).trim();
String signouttime = Util.null2String(rs.getString("signouttime")).trim();
int attendanceMins = rs.getInt("attendanceMins");
String beLateMins = Util.null2String(rs.getString("beLateMins")).trim();
String graveBeLateMins = Util.null2String(rs.getString("graveBeLateMins")).trim();
String leaveEarlyMins= Util.null2String(rs.getString("leaveEarlyMins")).trim();
String graveLeaveEarlyMins= Util.null2String(rs.getString("graveLeaveEarlyMins")).trim();
String absenteeismMins= Util.null2String(rs.getString("absenteeismMins")).trim();
String forgotCheckMins = Util.null2String(rs.getString("forgotcheckMins")).trim();
String forgotBeginWorkCheckMins = Util.null2String(rs.getString("forgotBeginWorkCheckMins")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
int evectionMins = rs.getInt("evectionMins");
int outMins = rs.getInt("outMins");
if(serialid.length()>0){
if (workbegintime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("workdate",workbegindate);
signStatusInfo.put("worktime",workbegintime);
signStatusInfo.put("beLateMins",beLateMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("graveBeLateMins",graveBeLateMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
if (workendtime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("workdate",workenddate);
signStatusInfo.put("worktime",kqTimesArrayComInfo.turn48to24Time(workendtime));
signStatusInfo.put("leaveEarlyMins",leaveEarlyMins);
signStatusInfo.put("graveLeaveEarlyMins",graveLeaveEarlyMins);
signStatusInfo.put("forgotCheckMins",forgotCheckMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
if(workMins>0){
//弹性工时打卡时间取自签到签退数据
}
signStatusInfo = new HashMap();
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
if(signinid.length() > 0){
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
if(signoutid.length() > 0){
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
}
}
}catch (Exception e){
writeLog(e);
}
return data;
}
private String getFieldValueByUnitType(String fieldValue,String unittype){
if (Util.null2String(unittype).length() > 0) {
if (fieldValue.length() == 0) {
fieldValue = "0";
} else {
if (unittype.equals("2")) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
}
}
return fieldValue;
}
@Override
public BizLogContext getLogContext() {
return null;
}
}

@ -1,918 +0,0 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.util.ExcelUtil;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.UtilKQ;
import com.engine.xmgsecond.entity.KqFormatTotal;
import com.engine.xmgsecond.util.KqCalulateUtil;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import com.google.common.collect.Lists;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
private HttpServletRequest request;
private HttpServletResponse response;
private List<String> lsFieldDataKey;
private boolean isKqReportHalfOpen = "1".equals(new KQSettingsComInfo().getMain_val("kq_report_half"));
public ExportExcelCmd(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response, User user) {
this.user = user;
this.params = params;
this.request = request;
this.response = response;
this.lsFieldDataKey = new ArrayList<>();
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
try {
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String leavetype_is_on = Util.null2String(kqSettingsComInfo.getMain_val("leavetype_is_on"),"0");
KQReportBiz kqReportBiz = new KQReportBiz();
new KQReportBiz().insertKqReportExportLog(params, user);
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String attendanceSerial = Util.null2String(jsonObj.get("attendanceSerial"));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect = Util.null2String(jsonObj.get("typeselect"));
if (typeselect.length() == 0) typeselect = "3";
if (!typeselect.equals("") && !typeselect.equals("0") && !typeselect.equals("6")) {
if (typeselect.equals("1")) {
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
} else {
fromDate = TimeUtil.getDateByOption(typeselect, "0");
toDate = TimeUtil.getDateByOption(typeselect, "1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
List<String> showColumns = Util.splitString2List(Util.null2String(jsonObj.get("showColumns")), ",");
showColumns.add("lastname");
showColumns.removeIf(showColumn->showColumn.trim().equals(""));
List<String> tmpShowColumns = new ArrayList<>();
for(String showColumn:showColumns){
tmpShowColumns.add(showColumn);
String cascadekey = "";
if(showColumn.equals("beLate")){
cascadekey = "beLateMins";
}else if(showColumn.equals("leaveEearly")){
cascadekey = "leaveEarlyMins";
}else if(showColumn.equals("graveBeLate")){
cascadekey = "graveBeLateMins";
}else if(showColumn.equals("graveLeaveEarly")){
cascadekey = "graveLeaveEarlyMins";
}else if(showColumn.equals("absenteeism")){
cascadekey = "absenteeismMins";
}else if(showColumn.equals("overtime")){
tmpShowColumns.add("overtime_4leave");
tmpShowColumns.add("overtime_nonleave");
tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("workingDayOvertime_4leave");
tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_nonleave");
}
if(cascadekey.length()>0){
tmpShowColumns.add(cascadekey);
}
}
showColumns = tmpShowColumns;
String rightSql = new KQReportBiz().getReportRight("1", "" + user.getUID(), "a");
LinkedHashMap<String, Object> workbook = new LinkedHashMap<>();
List<Object> lsSheet = new ArrayList<>();
Map<String, Object> sheet = null;
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
List<List<Object>> dataList = new ArrayList<>();
List<Object> data = null;
List<Map<String, Object>> constraintList = null;
sheet = new HashMap<>();
sheet.put("sheetName", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
sheet.put("sheetTitle", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
boolean isEnd = false;
Calendar cal = DateUtil.getCalendar();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()) {
if (Util.null2String(kqReportFieldComInfo.getParentid()).length() > 0) continue;
if(kqReportFieldComInfo.getFieldname().equals("kqCalendar"))continue;
if(KQReportFieldComInfo.cascadekey2fieldname.keySet().contains(kqReportFieldComInfo.getFieldname()))continue;
if (!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))
continue;
if (!showColumns.contains(kqReportFieldComInfo.getFieldname())&&!showColumns.contains(kqReportFieldComInfo.getParentid())) continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
title = new HashMap<>();
String unitType = KQReportBiz.getUnitType(kqReportFieldComInfo, user);
if(unitType.length()>0){
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())+ "(" + unitType + ")");
}else{
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
}
title.put("width", 30 * 256);
this.lsFieldDataKey.add(kqReportFieldComInfo.getFieldname());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(), user);
childColumns = (List<Object>) mapChildColumnInfo.get("childColumns");
if (childColumns.size() > 0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan", childColumns.size());
} else {
title.put("rowSpan", 3);
}
titleList.add(title);
titleList.addAll(this.getCascadeKeyColumnsInfo(kqReportFieldComInfo.getCascadekey(),user));
}
String today = DateUtil.getCurrentDate();
// if (DateUtil.compDate(today, toDate) > 0) {//结束如期不大于今天
// toDate = today;
// }
if(showColumns.contains("kqCalendar")) {
childColumns = new ArrayList<>();
for (String date = fromDate; !isEnd; ) {
if (date.equals(toDate)) isEnd = true;
title = new HashMap<>();
title.put("title", UtilKQ.getWeekDayShort(DateUtil.getWeek(date)-1,user.getLanguage()) +"\r\n"+ DateUtil.geDayOfMonth(date));
title.put("width", 30 * 256);
childColumns.add(title);
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
title = new HashMap();
title.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage()));
if (childColumns.size() > 0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan", childColumns.size());
}
titleList.add(title);
}
sheet.put("titleList", titleList);
// 没有权限的人最大只支持查询本季
Map<String, String> getRealDate = new KQReportBiz().realDate(fromDate, toDate, user, "1");
fromDate = getRealDate.get("fromDate");
toDate = getRealDate.get("toDate");
if("-1".equals(fromDate) || "-1".equals(toDate)) {
retmap.put("status", "1");
return retmap;
}
List<List> paramLists = new ArrayList<>();
List<Object> paramList = null;
String forgotBeginWorkCheck_field = " sum(b.forgotBeginWorkCheck) ";
if(rs.getDBType().equalsIgnoreCase("oracle")) {
forgotBeginWorkCheck_field = " sum(nvl(b.forgotBeginWorkCheck,0)) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " sum(ifnull(b.forgotBeginWorkCheck,0)) ";
}else {
forgotBeginWorkCheck_field = " sum(isnull(b.forgotBeginWorkCheck,0)) ";
}
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," +
" 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," +
" sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " +
" sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+
" sum(b.absenteeismMins) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":"");
if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
}
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='" + fromDate + "' and b.kqdate <='" + toDate + "'";
String sqlWhere = rightSql;
String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle ";
if (subCompanyId.length() > 0) {
sqlWhere +=" and a.subcompanyid1 in("+KQReportBiz.splitParamStr(subCompanyId)+") ";
for(String bean : subCompanyId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if (departmentId.length() > 0) {
sqlWhere +=" and a.departmentid in("+KQReportBiz.splitParamStr(departmentId)+") ";
for(String bean : departmentId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if (resourceId.length() > 0) {
sqlWhere +=" and a.id in("+KQReportBiz.splitParamStr(resourceId)+") ";
for(String bean : resourceId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if (viewScope.equals("4")) {//我的下属
if (allLevel.equals("1")) {//所有下属
sqlWhere += " and a.managerstr like '%," + user.getUID() + ",%'";
} else {
sqlWhere += " and a.managerid=" + user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null " + (rs.getDBType().equals("oracle") ? "" : " and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = ?";
paramList = new ArrayList<>();
paramList.add(status);
paramLists.add(paramList);
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
String orderBy = " order by a.dsporder asc, a.lastname asc ";
String descOrderBy = " order by a.dsporder desc, a.lastname desc ";
sql = "select " + backFields + sqlFrom + sqlWhere + groupBy + orderBy;
//System.out.println("start" + DateUtil.getFullDate());
String show_card_source = Util.null2String(kqSettingsComInfo.getMain_val("show_card_source"),"0");//是否显示打卡数据,以及打卡数据来源
params.put("show_card_source",show_card_source);
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
params.put("uintType",uintType);
params.put("hoursToDay",hoursToDay);
Map<String, Object> flowData = new KQReportBiz().getFlowData(params, user);
//System.out.println("end" + DateUtil.getFullDate());
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
String fullPathMainKey = "show_full_path";
String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0");
rs.executeQuery(sql, paramLists);
int calIndex = -1;
while (rs.next()) {
data = new ArrayList<>();
String id = rs.getString("id");
for (int fieldDataKeyIdx =0;fieldDataKeyIdx<lsFieldDataKey.size();fieldDataKeyIdx++) {
String fieldName = lsFieldDataKey.get(fieldDataKeyIdx);
String fieldid = KQReportFieldComInfo.field2Id.get(fieldName);
String fieldValue = "";
if (fieldName.equals("subcompany")) {
String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid"));
if (tmpSubcompanyId.length() == 0) {
tmpSubcompanyId = Util.null2String(resourceComInfo.getSubCompanyID(id));
}
fieldValue = "1".equals(isShowFullPath) ?
SubCompanyComInfo.getSubcompanyRealPath(tmpSubcompanyId, "/", "0") :
subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
// fieldValue = subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
} else if (fieldName.equals("department")) {
String tmpDepartmentId = Util.null2String(rs.getString("departmentid"));
if (tmpDepartmentId.length() == 0) {
tmpDepartmentId = Util.null2String(resourceComInfo.getDepartmentID(id));
}
fieldValue = "1".equals(isShowFullPath) ?
departmentComInfo.getDepartmentRealPath(tmpDepartmentId, "/", "0") :
departmentComInfo.getDepartmentname(tmpDepartmentId);
// fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
} else if(fieldName.equals("zcgzts")){
String rlzqqxsTime = getXcqts(fromDate,id);
fieldValue = rlzqqxsTime;
} else if (fieldName.equals("jobtitle")) {
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if (tmpJobtitleId.length() == 0) {
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
}
fieldValue = jobTitlesComInfo.getJobTitlesname(tmpJobtitleId);
} else if("kqGroup".equals(fieldName)){
//QC3685035 考勤月度报表增加所属所属考勤组
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(id, toDate);
fieldValue = kqGroupComInfo.getGroupname(groupId);
// 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("nigntWork".equals(fieldName)){
//QC3685035 考勤月度报表增加夜班次数
fieldValue = String.valueOf(KqCalulateUtil.nightWorkSums(id,fromDate,toDate));
}else if (fieldName.equals("attendanceSerial")) {
List<String> serialIds = null;
if (Util.null2String(jsonObj.get("attendanceSerial")).length() > 0) {
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")), ",");
for(int i=0;serialIds!=null&&i<serialIds.size();i++){
data.add(kqReportBiz.getSerialCount(id,fromDate,toDate,serialIds.get(i)));
}
}else{
data.add("");
}
continue;
} else if (fieldName.equals("leave")) {//请假
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
if (("1").equals(leavetype_is_on)) {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
for (int i = allLeaveRules.size() - 1; i >= 0; i--) {
Map<String, Object> leaveRule = allLeaveRules.get(i);
String leaveId = Util.null2String(leaveRule.get("id"));
boolean flag = kqLeaveRulesBiz.filterSubLeaveRule(kqLeaveRulesComInfo, user, leaveId);
if (flag) {
allLeaveRules.remove(i);
}
}
}
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = allLeaveRules.get(i);
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
writeLog("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
data.add(flowLeaveData);
}
continue;
}else if(fieldName.equals("overtime")){
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_4leave"))));
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave<0?0:workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave<0?0:restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave+restDayOvertime_4leave+holidayOvertime_4leave+
workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("overtimeTotal"))));
continue;
}else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
String businessLeaveData = Util.null2s(Util.null2String(flowData.get(id+"|"+fieldName)),"0.0");
String backType = fieldName+"_back";
String businessLeavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+backType)),"0.0");
String businessLeave = "";
try{
//以防止出现精度问题
if(businessLeaveData.length() == 0){
businessLeaveData = "0.0";
}
if(businessLeavebackData.length() == 0){
businessLeavebackData = "0.0";
}
BigDecimal b_businessLeaveData = new BigDecimal(businessLeaveData);
BigDecimal b_businessLeavebackData = new BigDecimal(businessLeavebackData);
businessLeave = b_businessLeaveData.subtract(b_businessLeavebackData).toString();
if(Util.getDoubleValue(businessLeave, -1) < 0){
businessLeave = "0.0";
}
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
} else if(Util.null2String(kqReportFieldComInfo.getCascadekey(fieldid)).length()>0){
fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage());
data.add(fieldValue);
List<String> lsCascadekey = Util.splitString2List(kqReportFieldComInfo.getCascadekey(fieldid),",");
for(int i=0;i<lsCascadekey.size();i++){
if(Util.null2String(rs.getString(lsCascadekey.get(i))).length()>0){
fieldid = KQReportFieldComInfo.field2Id.get(lsCascadekey.get(i));
fieldValue = getFieldValueByUnitType(rs.getString(lsCascadekey.get(i)),kqReportFieldComInfo.getUnittype(fieldid));
}else{
fieldValue = "0";
}
data.add(fieldValue);
}
continue;
}else {
fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage());
fieldValue = getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(fieldid));
}
fieldValue = Util.formatMultiLang(fieldValue,""+user.getLanguage());
data.add(fieldValue);
}
List<Object> amData = Lists.newArrayList();
List<Object> pmData = Lists.newArrayList();
if(isKqReportHalfOpen) {
amData.addAll(data);
pmData.addAll(data);
calIndex = data.size();
}
if(showColumns.contains("kqCalendar")) {
// Map<String, Object> detialDatas = kqReportBiz.getDetialDatas(id, fromDate, toDate, user,flowData,true);
Map<String, Object> detialDatas = kqReportBiz.getDetialDatas(id, fromDate, toDate, user,flowData,true,uintType,show_card_source);
String user_endDate = Util.null2String(resourceComInfo.getEndDate(id));
String user_status = Util.null2String(resourceComInfo.getStatus(id));
String begindate = Util.null2String(resourceComInfo.getCreatedate(id)).trim();
String companyStartDate = Util.null2String(resourceComInfo.getCompanyStartDate(id)).trim();
if(companyStartDate.length()!=10){
companyStartDate = "";
}
if(companyStartDate.length()>0 && companyStartDate.indexOf("-")>0){
begindate=companyStartDate;
}
isEnd = false;
for (String date = fromDate; !isEnd; ) {
if (date.equals(toDate)) isEnd = true;
if(DateUtil.compDate(today, date)>0){
if(isKqReportHalfOpen) {
amData.add("");
pmData.add("");
} else {
data.add("");
}
}else{
if(!(user_status.equals("0")||user_status.equals("1")||user_status.equals("2")||user_status.equals("3"))){
//其他状态
if(user_endDate.length()>0 && date.compareTo(user_endDate)>0){//人员合同结束日期之后
if(isKqReportHalfOpen) {
amData.add("");
pmData.add("");
} else {
data.add("");
}
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
continue;
}
}
if(begindate.length()>0 && date.compareTo(begindate)<0 ){//人员入职日期前无需计算考勤,如果没有入职日期,已创建日期为准
if(isKqReportHalfOpen) {
amData.add("");
pmData.add("");
} else {
data.add("");
}
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
continue;
}
if (detialDatas.get(id + "|" + date) != null) {
if(isKqReportHalfOpen) {
amData.add(((Map<String, Object>) detialDatas.get(id + "|" + date)).get("textAM"));
pmData.add(((Map<String, Object>) detialDatas.get(id + "|" + date)).get("textPM"));
} else {
data.add(((Map<String, Object>) detialDatas.get(id + "|" + date)).get("text"));
}
} else {
if(isKqReportHalfOpen) {
amData.add(SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
pmData.add(SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
} else {
data.add(SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
}
}
}
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
}
if(isKqReportHalfOpen) {
dataList.add(amData);
dataList.add(pmData);
} else {
dataList.add(data);
}
}
sheet.put("dataList", dataList);
if(isKqReportHalfOpen) {
sheet.put("calIndex", calIndex);
}
sheet.put("constraintList", constraintList);
sheet.put("createFile", "1");
lsSheet.add(sheet);
workbook.put("sheet", lsSheet);
String fileName = SystemEnv.getHtmlLabelName(390351, user.getLanguage())+" "+fromDate+" "+toDate;
workbook.put("fileName", fileName);
ExcelUtil ExcelUtil = new ExcelUtil();
Map<String, Object> exportMap = ExcelUtil.export(workbook, request, response,true);
retmap.putAll(exportMap);
retmap.put("status", "1");
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
writeLog(e);
}
return retmap;
}
private Map<String, Object> getChildColumnsInfo(String parentid, User user) {
Map<String, Object> returnMap = new HashMap<>();
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String leavetype_is_on = Util.null2String(kqSettingsComInfo.getMain_val("leavetype_is_on"),"0");
if (parentid.equals("attendanceSerial")) {//考勤班次
KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
List<String> serialIds = null;
if (Util.null2String(jsonObj.get("attendanceSerial")).length() > 0) {
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")), ",");
}
for (int i = 0; serialIds != null && i < serialIds.size(); i++) {
title = new HashMap<>();
title.put("title", Util.formatMultiLang(kqShiftManagementComInfo.getSerial(serialIds.get(i)),""+user.getLanguage()));
title.put("width", 30 * 256);
titleList.add(title);
}
} else if (parentid.equals("leave")) {
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
if (("1").equals(leavetype_is_on)) {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
for (int i = leaveRules.size() - 1; i >= 0; i--) {
Map<String, Object> leaveRule = leaveRules.get(i);
String leaveId = Util.null2String(leaveRule.get("id"));
boolean flag = kqLeaveRulesBiz.filterSubLeaveRule(kqLeaveRulesComInfo, user, leaveId);
if (flag) {
leaveRules.remove(i);
}
}
}
for (int i = 0; leaveRules != null && i < leaveRules.size(); i++) {
Map<String, Object> leaveRule = leaveRules.get(i);
String name = Util.formatMultiLang(Util.null2String(leaveRule.get("name")),""+user.getLanguage());
String unitType = Util.null2String(leaveRule.get("unitType"));
String unitName = (KQUnitBiz.isLeaveHour(unitType)) ? SystemEnv.getHtmlLabelName(391, user.getLanguage()) : SystemEnv.getHtmlLabelName(1925, user.getLanguage());
title = new HashMap<>();
title.put("title", name + "(" + unitName + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
title = new HashMap();
String fieldlabel = "";
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else{
fieldlabel = "523";
title.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())+ "(" + unitTypeName + ")");
}
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
title.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
title.put("width", childWidth+"");
titleList.add(title);
}
} else {
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()) {
if (kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
title = new HashMap<>();
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}
}
returnMap.put("childColumns", titleList);
return returnMap;
}
private List<Object> getCascadeKeyColumnsInfo(String cascadeKey, User user){
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
if(Util.null2String(cascadeKey).length()==0){
return titleList;
}
List<String> lsCascadeKey = Util.splitString2List(cascadeKey,",");
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
for(int i=0;i<lsCascadeKey.size();i++){
kqReportFieldComInfo.setTofirstRow();
while (kqReportFieldComInfo.next()) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
if (kqReportFieldComInfo.getFieldname().equals(lsCascadeKey.get(i))){
title = new HashMap<>();
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}
}
return titleList;
}
private String getFieldValueByUnitType(String fieldValue,String unittype){
if (Util.null2String(unittype).length() > 0) {
if (fieldValue.length() == 0) {
fieldValue = "0";
} else {
if (unittype.equals("2")) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
}
}
return fieldValue;
}
@Override
public BizLogContext getLogContext() {
return null;
}
/**
*
*
* @return
*/
public static String findRzrq(String jbr) {
RecordSet rs = new RecordSet();
String sql = "select id,companystartdate from hrmresource where id ="+jbr;
rs.executeQuery(sql);
String companystartdate = "";
if (rs.next()) {
companystartdate = Util.null2String(rs.getString("companystartdate"));
}
return companystartdate;
}
/**
*
*
* @return
*/
public static String findLzrq(String jbr) {
RecordSet rs = new RecordSet();
String sql = "select changedate from HrmStatusHistory where RESOURCEID ="+jbr+" and type_n = 5";
rs.executeQuery(sql);
String changedate = "";
if (rs.next()) {
changedate = Util.null2String(rs.getString("changedate"));
}
return changedate;
}
/**
*
* @param dateOri
* @param userId
* @return
*/
public String getXcqts(String dateOri,String userId){
//需出勤天数
Integer xcqtsAll = 0;
//获取员工的入职日期
String rzrq = findRzrq(userId);
//获取员工的离职日期
String lzrq = findLzrq(userId);
String dateOriSub = dateOri.substring(0,7);
//本月第一天
String fromDate = TimeUtil.getMonthBeginDay(dateOri);
//本月最后一天
String toDate = TimeUtil.getMonthEndDay(dateOri);
//入职日期处理
if(StringUtils.isNotBlank(rzrq)){
String rzrqSub = rzrq.substring(0,7);
if(rzrqSub.equals(dateOriSub)){
//入职日期在当月
Set<String> all = new HashSet<>();
all.add(fromDate);
List<String> back = days(fromDate,rzrq);
all.addAll(back);
for (String date : all) {
Integer zcgzts = 0;
KQHolidaySetComInfo holidaySetComInfo = new KQHolidaySetComInfo();
String changeTypeNew = holidaySetComInfo.getChangeType("1", date);
// if("2".equals(changeTypeNew)){
// //调配工作日计正常工作天数
// zcgzts = 1;
// }
if(DateUtil.getWeek(date) != 6 && DateUtil.getWeek(date) != 7){
//不为周六周日
if(!"3".equals(changeTypeNew)){
//不为休息日
zcgzts = 1;
}
}
xcqtsAll = xcqtsAll+zcgzts;
}
}
}
//离职日期处理
if(StringUtils.isNotBlank(lzrq)){
String lzrqSub = lzrq.substring(0,7);
if(lzrqSub.equals(dateOriSub)){
//离职日期在当月
Set<String> all = new HashSet<>();
List<String> back = days(lzrq,toDate);
all.addAll(back);
all.add(toDate);
for (String date : all) {
Integer zcgzts = 0;
KQHolidaySetComInfo holidaySetComInfo = new KQHolidaySetComInfo();
String changeTypeNew = holidaySetComInfo.getChangeType("1", date);
// if("2".equals(changeTypeNew)){
// //调配工作日计正常工作天数
// zcgzts = 1;
// }
if(DateUtil.getWeek(date) != 6 && DateUtil.getWeek(date) != 7){
//不为周六周日
if(!"3".equals(changeTypeNew)){
//不为休息日
zcgzts = 1;
}
}
xcqtsAll = xcqtsAll+zcgzts;
}
}
}
Integer newXcqTime = xcqtsAll * 8;
new BaseBean().writeLog(userId+"newXcqTime"+newXcqTime);
return String.valueOf(newXcqTime);
}
/**
*
* @param date1
* @param date2
* @return
*/
public static ArrayList days(String date1, String date2) {
String dateFormat = "yyyy-MM-dd";
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
ArrayList L = new ArrayList();
if (date1.equals(date2)) {
System.out.println("两个日期相等!");
return L;
}
String tmp;
if (date1.compareTo(date2) > 0) { // 确保 date1的日期不晚于date2
tmp = date1;
date1 = date2;
date2 = tmp;
}
tmp = format.format(str2Date(date1).getTime() + 3600 * 24 * 1000);
int num = 0;
while (tmp.compareTo(date2) < 0) {
L.add(tmp);
num++;
tmp = format.format(str2Date(tmp).getTime() + 3600 * 24 * 1000);
}
if (num == 0)
System.out.println("两个日期相邻!");
return L;
}
private static Date str2Date(String str) {
String dateFormat = "yyyy-MM-dd";
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
if (str == null)
return null;
try {
return format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}

@ -1,748 +0,0 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit;
import com.engine.kq.entity.WorkTimeEntity;
import com.engine.kq.log.KQLog;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.PageUidFactory;
import com.engine.xmgsecond.entity.KqFormatTotal;
import com.engine.xmgsecond.util.KqCalulateUtil;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Object>> {
private KQLog kqLog = new KQLog();
public GetKQDailyReportCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String,Object> retmap = new HashMap<String,Object>();
RecordSet rs = new RecordSet();
String sql = "";
try{
String pageUid = PageUidFactory.getHrmPageUid("KQDailyReport");
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQWorkTime kqWorkTime = new KQWorkTime();
ShiftManagementToolKit shiftManagementToolKit = new ShiftManagementToolKit();
KQReportBiz kqReportBiz = new KQReportBiz();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String leavetype_is_on = Util.null2String(kqSettingsComInfo.getMain_val("leavetype_is_on"),"0");
String rightSql = new KQReportBiz().getReportRight("2",""+user.getUID(),"a");
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect =Util.null2String(jsonObj.get("typeselect"));
if(typeselect.length()==0)typeselect = "3";
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
if(typeselect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeselect,"0");
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
if(typeselect.length()==0)typeselect = "3";
int pageIndex = Util.getIntValue(Util.null2String(jsonObj.get("pageIndex")), 1);
int pageSize = KQReportBiz.getPageSize(Util.null2String(jsonObj.get("pageSize")),pageUid,user.getUID());
int count = 0;
int pageCount = 0;
int isHavePre = 0;
int isHaveNext = 0;
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
List<Object> columns = new ArrayList();
Map<String,Object> column = null;
List<Object> datas = new ArrayList();
Map<String,Object> data = null;
Map<String,Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
//QC3685035 考勤每日表去除严重迟到,严重早退(+对应时长) + 缺勤天数 5列
if ("graveBeLate".equals(kqReportFieldComInfo.getFieldname())) continue;
if ("graveLeaveEarly".equals(kqReportFieldComInfo.getFieldname())) continue;
if ("graveBeLateMins".equals(kqReportFieldComInfo.getFieldname())) continue;
if ("graveLeaveEarlyMins".equals(kqReportFieldComInfo.getFieldname())) continue;
if ("absenteeismDays".equals(kqReportFieldComInfo.getFieldname())) continue;
if(Util.null2String(kqReportFieldComInfo.getParentid()).length()>0)continue;
boolean isDaily = kqReportFieldComInfo.getReportType().equals("daily");
if(!kqReportFieldComInfo.getReportType().equals("all") && !isDaily)continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(),user);
childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("rowSpan", 1);
column.put("width", mapChildColumnInfo.get("sumChildColumnWidth"));
column.put("children", childColumns);
}else{
column.put("rowSpan", 3);
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
}
if(kqReportFieldComInfo.getReportType1().equals("daily")){
column.put("isdaily", "1");
}
column.put("showDetial",kqReportFieldComInfo.getShowDetial());
columns.add(column);
}
// String today = DateUtil.getCurrentDate();
// if(DateUtil.compDate(today, toDate)>0){//结束如期不大于今天
// toDate = today;
// if(DateUtil.compDate(today, fromDate)>0){
// fromDate = today;
// }
// }
// 没有权限的人最大只支持查询本季
Map<String, String> getRealDate = new KQReportBiz().realDate(fromDate, toDate, user, "2");
fromDate = getRealDate.get("fromDate");
toDate = getRealDate.get("toDate");
String forgotBeginWorkCheck_field = " b.forgotbeginworkcheck ";
List<List> paramLists = new ArrayList<>();
List<Object> paramList = null;
if(rs.getDBType().equalsIgnoreCase("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")&&!Util.null2String(rs.getOrgindbtype()).equals("jc")) {
forgotBeginWorkCheck_field = " nvl(b.forgotBeginWorkCheck,0) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " ifnull(b.forgotBeginWorkCheck,0) ";
}else {
forgotBeginWorkCheck_field = " isnull(b.forgotBeginWorkCheck,0) ";
}
String backFields = " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins," +
" b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," +
" b.signdays,b.signmins, "+
" b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism ,b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql;
if(subCompanyId.length()>0){
sqlWhere +=" and a.subcompanyid1 in("+KQReportBiz.splitParamStr(subCompanyId)+") ";
for(String bean : subCompanyId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+KQReportBiz.splitParamStr(departmentId)+") ";
for(String bean : departmentId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if(resourceId.length()>0){
sqlWhere +=" and a.id in("+KQReportBiz.splitParamStr(resourceId)+") ";
for(String bean : resourceId.split(",")) {
paramList = new ArrayList<>();
paramList.add(bean);
paramLists.add(paramList);
}
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = ?";
paramList = new ArrayList<>();
paramList.add(status);
paramLists.add(paramList);
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
if("-1".equals(fromDate) || "-1".equals(toDate)) {
sqlWhere += " and 1=2 ";
}
sql = " select count(*) as c from ( select 1 as c "+sqlFrom+sqlWhere+") t";
rs.executeQuery(sql, paramLists);
if (rs.next()){
count = rs.getInt("c");
}
if (count <= 0) {
pageCount = 0;
}
pageCount = count / pageSize + ((count % pageSize > 0) ? 1 : 0);
isHaveNext = (pageIndex + 1 <= pageCount) ? 1 : 0;
isHavePre = (pageIndex - 1 >= 1) ? 1 : 0;
String orderBy = " order by a.dsporder asc, a.lastname asc, b.kqdate asc ";
String descOrderBy = " order by a.dsporder desc, a.lastname desc, b.kqdate desc ";
sql = backFields + sqlFrom + sqlWhere + orderBy;
if (pageIndex > 0 && pageSize > 0) {
if (rs.getDBType().equals("oracle")) {
sql = " select " + sql;
sql = "select * from ( select row_.*, rownum rownum_ from ( " + sql + " ) row_ where rownum <= "
+ (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize);
} else if (rs.getDBType().equals("mysql")) {
sql = " select " + sql;
sql = "select t1.* from (" + sql + ") t1 limit " + ((pageIndex - 1) * pageSize) + "," + pageSize;
}
else if (rs.getDBType().equals("postgresql")) {
sql = " select " + sql;
sql = "select t1.* from (" + sql + ") t1 limit " + pageSize+ " offset " + ((pageIndex - 1) * pageSize);
}
else {
orderBy = " order by dsporder asc, lastname asc, kqdate asc ";
descOrderBy = " order by dsporder desc, lastname desc, kqdate desc ";
if (pageIndex > 1) {
int topSize = pageSize;
if (pageSize * pageIndex > count) {
topSize = count - (pageSize * (pageIndex - 1));
}
sql = " select top " + topSize + " * from ( select top " + topSize + " * from ( select top "
+ (pageIndex * pageSize) + sql+" ) tbltemp1 " + descOrderBy + ") tbltemp2 " + orderBy;
} else {
sql = " select top " + pageSize + sql;
}
}
} else {
sql = " select " + sql;
}
boolean isneedcal = KQSettingsBiz.getKqformatAccurate();
params.put("isneedcal",isneedcal?"1":"0");
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
Map<String,String> serialdata = new HashMap<>();
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
String fullPathMainKey = "show_full_path";
String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0");
rs.executeQuery(sql, paramLists);
while (rs.next()) {
String id = rs.getString("id");
String kqdate = rs.getString("kqdate");
WorkTimeEntity workTime = kqWorkTime.getWorkTime(id, kqdate);
data = new HashMap<>();
kqReportFieldComInfo.setTofirstRow();
while (kqReportFieldComInfo.next()) {
if (!Util.null2String(kqReportFieldComInfo.getIsdataColumn()).equals("1")) continue;
if (!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("daily"))
continue;
String fieldName = kqReportFieldComInfo.getFieldname();
String fieldValue = "";
if (fieldName.equals("subcompany")) {
String fieldValueID = rs.getString("subcompanyid");
fieldValue = "1".equals(isShowFullPath) ?
SubCompanyComInfo.getSubcompanyRealPath(fieldValueID, "/", "0") :
subCompanyComInfo.getSubCompanyname(fieldValueID);
//fieldValue = subCompanyComInfo.getSubCompanyname(fieldValueID);
if (fieldValue.length() == 0) {
fieldValueID = resourceComInfo.getSubCompanyID(id);
fieldValue = "1".equals(isShowFullPath) ?
SubCompanyComInfo.getSubcompanyRealPath(fieldValueID, "/", "0") :
subCompanyComInfo.getSubCompanyname(fieldValueID);
// fieldValue = subCompanyComInfo.getSubCompanyname(fieldValueID);
}
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
} else if (fieldName.equals("department")) {
String fieldValueID = rs.getString("departmentid");
fieldValue = "1".equals(isShowFullPath) ?
departmentComInfo.getDepartmentRealPath(fieldValueID, "/", "0") :
departmentComInfo.getDepartmentname(fieldValueID);
//fieldValue = departmentComInfo.getDepartmentname(fieldValueID);
if (fieldValue.length() == 0) {
fieldValueID = resourceComInfo.getDepartmentID(id);
fieldValue = "1".equals(isShowFullPath) ?
departmentComInfo.getDepartmentRealPath(fieldValueID, "/", "0") :
departmentComInfo.getDepartmentname(fieldValueID);
// fieldValue = departmentComInfo.getDepartmentname(fieldValueID);
}
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
} else if (fieldName.equals("jobtitle")) {
String fieldValueID = rs.getString("jobtitle");
fieldValue = jobTitlesComInfo.getJobTitlesname(rs.getString("jobtitle"));
if (fieldValue.length() == 0) {
fieldValueID = resourceComInfo.getJobTitle(id);
fieldValue = jobTitlesComInfo.getJobTitlesname(fieldValueID);
}
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
}else if("kqGroup".equals(fieldName)){
//QC3685035 每日考勤报表增加所属所属考勤组
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(id, kqdate);
fieldValue = kqGroupComInfo.getGroupname(groupId);
data.put(fieldName, fieldValue);
}else if("nigntWork".equals(fieldName)){
//QC3685035 每日考勤报表增加夜班次数
fieldValue = String.valueOf(KqCalulateUtil.nightWorkSums(id,kqdate,kqdate));
data.put(fieldName, fieldValue);
} else if (kqReportFieldComInfo.getParentid().equals("overtime") || kqReportFieldComInfo.getParentid().equals("overtime_nonleave")
|| kqReportFieldComInfo.getParentid().equals("overtime_4leave") || fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")) {
if (fieldName.equals("overtimeTotal")) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
} else {
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|" + kqdate + "|" + fieldName)));
}
data.put(fieldName, fieldValue);
} else if (fieldName.equals("serialid")) {
fieldValue = Util.null2String(rs.getString(fieldName));
if (fieldValue.length()>0) {//弹性工作制没有班次
// data.put("serialid", shiftManagementToolKit.getShiftOnOffWorkSections(fieldValue, user.getLanguage()));
if(null != serialdata && serialdata.containsKey(fieldValue)){
data.put("serialid", serialdata.get(fieldValue));
}else{
String tmpserialname = shiftManagementToolKit.getShiftOnOffWorkSections(fieldValue, user.getLanguage());
serialdata.put(fieldValue,tmpserialname);
data.put("serialid", tmpserialname);
}
}
}else {
fieldValue = Util.null2String(rs.getString(fieldName));
if (kqReportFieldComInfo.getUnittype().equals("2") && fieldValue.length() > 0) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
data.put(fieldName, fieldValue);
}
}
data.putAll(this.getSignDetailInfo(id, kqdate));
//请假
List<Map<String, Object>> allLeaveRules = KQLeaveRulesBiz.getAllLeaveRules();
if (("1").equals(leavetype_is_on)) {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
for (int i = allLeaveRules.size() - 1; i >= 0; i--) {
Map<String, Object> leaveRule = allLeaveRules.get(i);
String leaveId = Util.null2String(leaveRule.get("id"));
boolean flag = KQLeaveRulesBiz.filterSubLeaveRule(kqLeaveRulesComInfo, user, leaveId);
if (flag) {
allLeaveRules.remove(i);
}
}
}
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = (Map<String, Object>) allLeaveRules.get(i);
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id + "|" + kqdate + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + kqdate + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
kqLog.info("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
//考虑下冻结的数据
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
data.put(flowType, flowLeaveData);
}
data.put("resourceId", id);
data.put("kqdate", kqdate);
datas.add(data);
}
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
retmap.put("columns",columns);
retmap.put("datas",datas);
retmap.put("pagesize", pageSize);
retmap.put("pageindex", pageIndex);
retmap.put("count", count);
retmap.put("pagecount", pageCount);
retmap.put("ishavepre", isHavePre);
retmap.put("ishavenext", isHaveNext);
}catch (Exception e){
writeLog(e);
}
return retmap;
}
private String getUnitType(String unitType, User user){
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
return unitTypeName;
}
private Map<String,Object> getChildColumnsInfo(String parentid, User user){
Map<String,Object> returnMap = new HashMap<>();
List<Object> lsChildColumns = new ArrayList<>();
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String leavetype_is_on = Util.null2String(kqSettingsComInfo.getMain_val("leavetype_is_on"),"0");
Map column = null;
int sumChildColumnWidth = 0;
if(parentid.equals("leave")){
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
if (("1").equals(leavetype_is_on)) {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
for (int i = leaveRules.size() - 1; i >= 0; i--) {
Map<String, Object> leaveRule = leaveRules.get(i);
String leaveId = Util.null2String(leaveRule.get("id"));
boolean flag = kqLeaveRulesBiz.filterSubLeaveRule(kqLeaveRulesComInfo, user, leaveId);
if (flag) {
leaveRules.remove(i);
}
}
}
for(int i=0;leaveRules!=null&&i<leaveRules.size();i++){
Map<String, Object> leaveRule = leaveRules.get(i);
String id = "leaveType_"+Util.null2String(leaveRule.get("id"));
String name = Util.null2String(leaveRule.get("name"));
String unitType = Util.null2String(leaveRule.get("unitType"));
column = new HashMap();
column.put("title", name);
column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage()));
column.put("width", 65);
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("showDetial","1");
sumChildColumnWidth+=65;
lsChildColumns.add(column);
}
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
String fieldlabel = "";
column.put("unit", "");
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
}else{
fieldlabel = "523";
column.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
column.put("unit", unitTypeName);
}
column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 1);
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
column.put("width", childWidth+"");
sumChildColumnWidth+=childWidth;
lsChildColumns.add(column);
}
}else{
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("daily"))continue;
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("isdaily", kqReportFieldComInfo.getReportType1().equals("daily")?"1":"0");
sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth());
lsChildColumns.add(column);
}
}
}
returnMap.put("childColumns",lsChildColumns);
returnMap.put("sumChildColumnWidth",sumChildColumnWidth);
return returnMap;
}
public Map<String, Object> getSignDetailInfo(String resourceId, String kqDate){
Map<String, Object> data = new HashMap<>();
Map<String,Object> signStatusInfo = null;
RecordSet rs = new RecordSet();
String sql = "";
KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo();
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
try{
sql = " select kqdate,resourceid,day_type,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
" leaveMins,leaveInfo,evectionMins,outMins,signinid,signoutid,flowinfo,on_absenteeismmins,off_absenteeismmins \n" +
" from kq_format_detail b \n" +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
rs.execute(sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
String serialid = Util.null2String(rs.getString("serialid"));
String dayType = Util.null2s(rs.getString("day_type"),"");
int workMins = rs.getInt("workMins");
boolean isNonWork = false;
if(serialid.length()==0){
isNonWork = true;
}
if(dayType.length() > 0){
if("holiday".equals(dayType) || "playday".equals(dayType)){
isNonWork = true;
}
}else{
if(workMins<=0){
isNonWork = true;
}else{
if(serialid.length() > 0){
String isRest = Util.null2s(kqShiftManagementComInfo.getIsRest(serialid),"");
if("1".equals(isRest)){
isNonWork = true;
}
}
}
}
int serialnumber = rs.getInt("serialnumber")+1;
String workbegindate = Util.null2String(rs.getString("workbegindate")).trim();
String workbegintime = Util.null2String(rs.getString("workbegintime")).trim();
String workenddate = Util.null2String(rs.getString("workenddate")).trim();
String workendtime = Util.null2String(rs.getString("workendtime")).trim();
String signintime = Util.null2String(rs.getString("signintime")).trim();
String signouttime = Util.null2String(rs.getString("signouttime")).trim();
int attendanceMins = rs.getInt("attendanceMins");
String beLateMins = Util.null2String(rs.getString("beLateMins")).trim();
String graveBeLateMins = Util.null2String(rs.getString("graveBeLateMins")).trim();
String leaveEarlyMins= Util.null2String(rs.getString("leaveEarlyMins")).trim();
String graveLeaveEarlyMins= Util.null2String(rs.getString("graveLeaveEarlyMins")).trim();
String absenteeismMins= Util.null2String(rs.getString("absenteeismMins")).trim();
String forgotCheckMins = Util.null2String(rs.getString("forgotcheckMins")).trim();
String forgotBeginWorkCheckMins = Util.null2String(rs.getString("forgotBeginWorkCheckMins")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
String flowinfo = Util.null2String(rs.getString("flowinfo"));
String on_absenteeismmins = Util.null2String(rs.getString("on_absenteeismmins"));
String off_absenteeismmins = Util.null2String(rs.getString("off_absenteeismmins"));
int evectionMins = rs.getInt("evectionMins");
int outMins = rs.getInt("outMins");
if(!isNonWork){
if (workbegintime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("resourceId",resourceid);
signStatusInfo.put("kqdate",kqdate);
signStatusInfo.put("workdate",workbegindate);
signStatusInfo.put("worktime",workbegintime);
signStatusInfo.put("beLateMins",beLateMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("graveBeLateMins",graveBeLateMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
signStatusInfo.put("flowinfo",flowinfo);
signStatusInfo.put("on_absenteeismmins",on_absenteeismmins);
signStatusInfo.put("off_absenteeismmins",off_absenteeismmins);
signStatusInfo.put("workbegintime",workbegintime);
signStatusInfo.put("workendtime",workendtime);
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
if (workendtime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("resourceId",resourceid);
signStatusInfo.put("kqdate",kqdate);
signStatusInfo.put("workdate",workenddate);
signStatusInfo.put("worktime",kqTimesArrayComInfo.turn48to24Time(workendtime));
signStatusInfo.put("leaveEarlyMins",leaveEarlyMins);
signStatusInfo.put("graveLeaveEarlyMins",graveLeaveEarlyMins);
signStatusInfo.put("forgotCheckMins",forgotCheckMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
signStatusInfo.put("flowinfo",flowinfo);
signStatusInfo.put("on_absenteeismmins",on_absenteeismmins);
signStatusInfo.put("off_absenteeismmins",off_absenteeismmins);
signStatusInfo.put("workbegintime",workbegintime);
signStatusInfo.put("workendtime",workendtime);
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
if(workMins>0){
//弹性工时打卡时间取自签到签退数据
}
signStatusInfo = new HashMap();
signStatusInfo.put("resourceId",resourceid);
signStatusInfo.put("kqdate",kqdate);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
signStatusInfo.put("flowinfo",flowinfo);
signStatusInfo.put("on_absenteeismmins",on_absenteeismmins);
signStatusInfo.put("off_absenteeismmins",off_absenteeismmins);
signStatusInfo.put("workbegintime",workbegintime);
signStatusInfo.put("workendtime",workendtime);
if(signinid.length() > 0){
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
if(signoutid.length() > 0){
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}else{
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else if (signoutid.length() > 0) {
data.put("signouttime" + serialnumber, signouttime.length() == 0 ? SystemEnv.getHtmlLabelName(25994, user.getLanguage()) : signouttime);
data.put("signoutstatus" + serialnumber, KQReportBiz.getSignStatus(signStatusInfo, user, "off"));
} else{
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}
}
}catch (Exception e){
writeLog(e);
}
return data;
}
@Override
public BizLogContext getLogContext() {
return null;
}
}

File diff suppressed because it is too large Load Diff

@ -1,407 +0,0 @@
package com.engine.kq.cmd.shiftschedule;
import com.api.browser.bean.SearchConditionItem;
import com.api.browser.bean.SearchConditionOption;
import com.api.browser.util.ConditionFactory;
import com.api.browser.util.ConditionType;
import com.api.hrm.bean.HrmFieldBean;
import com.api.hrm.bean.SelectOption;
import com.api.hrm.bean.WeaRadioGroup;
import com.api.hrm.util.HrmFieldSearchConditionComInfo;
import com.cloudstore.dev.api.util.Util_TableMap;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.KQGroupBiz;
import com.engine.kq.biz.KQGroupComInfo;
import com.engine.kq.biz.KQHolidaySetBiz;
import com.engine.kq.biz.KQShiftManagementComInfo;
import com.engine.kq.util.PageUidFactory;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.filter.XssUtil;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.util.*;
public class GetBatchShiftScheduleFromCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetBatchShiftScheduleFromCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
List<HrmFieldBean> lsField = new ArrayList<HrmFieldBean>();
HrmFieldBean hrmFieldBean = null;
List<SearchConditionOption> options = null;
Map<String,SearchConditionItem> mapItem = new HashMap<>();
try{
//必要的权限判断
if(!HrmUserVarify.checkUserRight("HrmKQGroup:Add",user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
KQGroupComInfo kQGroupComInfo = new KQGroupComInfo();
KQShiftManagementComInfo kQShiftManagementComInfo = new KQShiftManagementComInfo();
String groupId = Util.null2String(params.get("groupId"));//考勤组id
//排班类型、排班日期、排班人员、班次
//排班类型、排班开始日期、排班人员、遇节假日、排班周期
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("shiftScheduleType");
hrmFieldBean.setFieldlabel("389494");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
hrmFieldBean.setFieldvalue("1");
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(389506, user.getLanguage()),true));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(389507, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("shiftScheduleDate");
hrmFieldBean.setFieldlabel("16694");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setIsFormField(true);
hrmFieldBean.setViewAttr(3);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("shiftScheduleBeginDate");
hrmFieldBean.setFieldlabel("16694");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setIsFormField(true);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("shiftScheduleEndDate");
hrmFieldBean.setFieldlabel("16694");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("2");
hrmFieldBean.setViewAttr(3);
hrmFieldBean.setIsFormField(true);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("shiftScheduleMember");
hrmFieldBean.setFieldlabel("125839");
hrmFieldBean.setFieldhtmltype("3");
hrmFieldBean.setType("17");
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("holidayType");
hrmFieldBean.setFieldlabel("500436");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("meetHolidays");
hrmFieldBean.setFieldlabel("529182");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("meetRestDays");
hrmFieldBean.setFieldlabel("528922");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
options.add(new SearchConditionOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("serialId");
hrmFieldBean.setFieldlabel("24803");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
String[] serialids = Util.splitString(Util.null2String(kQGroupComInfo.getSerialids(groupId)),",");
for(int i=0;serialids!=null&&i<serialids.length;i++){
options.add(new SearchConditionOption(serialids[i],kQShiftManagementComInfo.getSerial(serialids[i]),i==0));
}
options.add(new SearchConditionOption("-1", SystemEnv.getHtmlLabelName(26593, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("serialIdSx");
hrmFieldBean.setFieldlabel("24803");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
for(int i=0;serialids!=null&&i<serialids.length;i++){
options.add(new SearchConditionOption(serialids[i],kQShiftManagementComInfo.getSerial(serialids[i]),i==0));
}
options.add(new SearchConditionOption("-1", SystemEnv.getHtmlLabelName(26593, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("serialIdJjr");
hrmFieldBean.setFieldlabel("24803");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
for(int i=0;serialids!=null&&i<serialids.length;i++){
options.add(new SearchConditionOption(serialids[i],kQShiftManagementComInfo.getSerial(serialids[i]),i==0));
}
options.add(new SearchConditionOption("-1", SystemEnv.getHtmlLabelName(26593, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("serialIdXxr");
hrmFieldBean.setFieldlabel("24803");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
for(int i=0;serialids!=null&&i<serialids.length;i++){
options.add(new SearchConditionOption(serialids[i],kQShiftManagementComInfo.getSerial(serialids[i]),i==0));
}
options.add(new SearchConditionOption("-1", SystemEnv.getHtmlLabelName(26593, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("serialIdGzr");
hrmFieldBean.setFieldlabel("24803");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
for(int i=0;serialids!=null&&i<serialids.length;i++){
options.add(new SearchConditionOption(serialids[i],kQShiftManagementComInfo.getSerial(serialids[i]),i==0));
}
options.add(new SearchConditionOption("-1", SystemEnv.getHtmlLabelName(26593, user.getLanguage())));
hrmFieldBean.setSelectOption(options);
lsField.add(hrmFieldBean);
hrmFieldBean = new HrmFieldBean();
hrmFieldBean.setFieldname("shiftcycleId");
hrmFieldBean.setFieldlabel("389103");
hrmFieldBean.setFieldhtmltype("5");
hrmFieldBean.setType("1");
options = new ArrayList<SearchConditionOption>();
sql = "select id,shiftcyclename,shiftcycleserialids from kq_group_shiftcycle where groupid = ? order by id asc ";
rs.executeQuery(sql,groupId);
while(rs.next()){
options.add(new SearchConditionOption(Util.null2String(rs.getString("id")),Util.null2String(rs.getString("shiftcyclename")),true));
hrmFieldBean.setSelectOption(options);
}
lsField.add(hrmFieldBean);
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo();
SearchConditionItem searchConditionItem = null;
for (int i = 0; i < lsField.size(); i++) {
searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(lsField.get(i), user);
if(lsField.get(i).getFieldname().equals("shiftScheduleMember")){
XssUtil xssUtil = new XssUtil();
Map<String,Object> tmpParams = new HashMap<>();
tmpParams.put("groupId",groupId);
tmpParams.put("isNoAccount",1);
String groupMemberSql = new KQGroupBiz().getGroupMemberSql(tmpParams);
String inSqlWhere = " hr.id in (select resourceid from (" + groupMemberSql + ") t1)";
String inSqlWhere1 = " t1.id in (select resourceid from (" + groupMemberSql + ") t1)";
if(!Util.null2String(kQGroupComInfo.getExcludecount(groupId)).equals("1")) {
//剔除无需排班人员
String excludeid = Util.null2String(kQGroupComInfo.getExcludeid(groupId));
if (excludeid.length() > 0) {
inSqlWhere += " and hr.id not in (" + excludeid + ")";
inSqlWhere1 += " and t1.id not in (" + excludeid + ")";
}
}
searchConditionItem.getBrowserConditionParam().getDataParams().put("sqlwhere", xssUtil.put(inSqlWhere));
searchConditionItem.getBrowserConditionParam().getCompleteParams().put("sqlwhere", xssUtil.put(inSqlWhere1));
}
mapItem.put(lsField.get(i).getFieldname(),searchConditionItem);
}
//下拉
List<Object> condition = new ArrayList<Object>();
condition.add(mapItem.get("shiftScheduleType"));
//按天排班
Map<String,Object> conditionMap = new HashMap<String, Object>();
List<Object> conditionlist = null;
List<Object> conditionlist2 = null;
conditionlist = new ArrayList<Object>();
conditionlist2 = new ArrayList<Object>();
conditionlist2.add(mapItem.get("shiftScheduleDate"));
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
WeaRadioGroup wrg = new WeaRadioGroup();
wrg.setLabel(SystemEnv.getHtmlLabelName(125839, user.getLanguage()));
List<Object> option = new ArrayList<>();
Map<String, Object> selectLinkageDatas = new HashMap<String, Object>();
selectLinkageDatas.put("2" ,mapItem.get("shiftScheduleMember"));
wrg.setSelectLinkageDatas(selectLinkageDatas);
option.add(new SelectOption("1",SystemEnv.getHtmlLabelName(389496, user.getLanguage()),true));
option.add(new SelectOption("2",SystemEnv.getHtmlLabelName(33210, user.getLanguage())));
List<String> domkey = new ArrayList<String>();
wrg.setOptions(option);
wrg.setConditionType("SELECT_LINKAGE");
wrg.setFieldcol(18);
wrg.setLabelcol(6);
domkey.add("shiftScheduleMemberType");
wrg.setDomkey(domkey);
conditionlist2.add(wrg);
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
conditionlist2.add(mapItem.get("serialId"));
conditionlist.add(conditionlist2);
conditionMap.put("1",conditionlist);
//按周期排班
conditionlist = new ArrayList<Object>();
conditionlist2 = new ArrayList<Object>();
conditionlist2.add(mapItem.get("shiftScheduleBeginDate"));
conditionlist2.add(mapItem.get("shiftScheduleEndDate"));
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
conditionlist2.add(wrg);
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
WeaRadioGroup wrgH = new WeaRadioGroup();
wrgH.setLabel(SystemEnv.getHtmlLabelName(500436, user.getLanguage()));
List<Object> optionH = new ArrayList<>();
Map<String, Object> selectLinkageDatasH = new HashMap<String, Object>();
selectLinkageDatasH.put("3" ,mapItem.get("serialIdSx"));
wrgH.setSelectLinkageDatas(selectLinkageDatasH);
optionH.add(new SelectOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
optionH.add(new SelectOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
optionH.add(new SelectOption("3","替换为指定班次"));
List<String> domkeyH = new ArrayList<String>();
wrgH.setOptions(optionH);
wrgH.setConditionType("SELECT_LINKAGE");
wrgH.setFieldcol(18);
wrgH.setLabelcol(6);
domkeyH.add("holidayType");
wrgH.setDomkey(domkeyH);
conditionlist2.add(wrgH);
// conditionlist2.add(mapItem.get("holidayType"));
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
WeaRadioGroup wrgJ = new WeaRadioGroup();
wrgJ.setLabel(SystemEnv.getHtmlLabelName(529182, user.getLanguage()));
List<Object> optionJ = new ArrayList<>();
Map<String, Object> selectLinkageDatasJ = new HashMap<String, Object>();
selectLinkageDatasJ.put("3" ,mapItem.get("serialIdJjr"));
wrgJ.setSelectLinkageDatas(selectLinkageDatasJ);
optionJ.add(new SelectOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
optionJ.add(new SelectOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
optionJ.add(new SelectOption("3","替换为指定班次"));
List<String> domkeyJ = new ArrayList<String>();
wrgJ.setOptions(optionJ);
wrgJ.setConditionType("SELECT_LINKAGE");
wrgJ.setFieldcol(18);
wrgJ.setLabelcol(6);
domkeyJ.add("meetHolidays");
wrgJ.setDomkey(domkeyJ);
conditionlist2.add(wrgJ);
// conditionlist2.add(mapItem.get("meetHolidays"));
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
WeaRadioGroup wrgX = new WeaRadioGroup();
wrgX.setLabel(SystemEnv.getHtmlLabelName(528922, user.getLanguage()));
List<Object> optionX = new ArrayList<>();
Map<String, Object> selectLinkageDatasX = new HashMap<String, Object>();
selectLinkageDatasX.put("3" ,mapItem.get("serialIdXxr"));
wrgX.setSelectLinkageDatas(selectLinkageDatasX);
optionX.add(new SelectOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
optionX.add(new SelectOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
optionX.add(new SelectOption("3","替换为指定班次"));
List<String> domkeyX = new ArrayList<String>();
wrgX.setOptions(optionX);
wrgX.setConditionType("SELECT_LINKAGE");
wrgX.setFieldcol(18);
wrgX.setLabelcol(6);
domkeyX.add("meetRestDays");
wrgX.setDomkey(domkeyX);
conditionlist2.add(wrgX);
// conditionlist2.add(mapItem.get("meetRestDays"));
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
WeaRadioGroup wrgG = new WeaRadioGroup();
wrgG.setLabel("遇调配工作日");
List<Object> optionG = new ArrayList<>();
Map<String, Object> selectLinkageDatasG = new HashMap<String, Object>();
selectLinkageDatasG.put("3" ,mapItem.get("serialIdGzr"));
wrgG.setSelectLinkageDatas(selectLinkageDatasG);
optionG.add(new SelectOption("1",SystemEnv.getHtmlLabelName(125899, user.getLanguage()),true));
optionG.add(new SelectOption("2",SystemEnv.getHtmlLabelName(125837, user.getLanguage())));
optionG.add(new SelectOption("3","替换为指定班次"));
List<String> domkeyG = new ArrayList<String>();
wrgG.setOptions(optionG);
wrgG.setConditionType("SELECT_LINKAGE");
wrgG.setFieldcol(18);
wrgG.setLabelcol(6);
domkeyG.add("meetworkDays");
wrgG.setDomkey(domkeyG);
conditionlist2.add(wrgG);
// conditionlist2.add(mapItem.get("meetRestDays"));
conditionlist.add(conditionlist2);
conditionlist2 = new ArrayList<Object>();
conditionlist2.add(mapItem.get("shiftcycleId"));
conditionlist.add(conditionlist2);
conditionMap.put("2",conditionlist);
condition.add(conditionMap);
retmap.put("conditions", condition);
retmap.put("status", "1");
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
@Override
public BizLogContext getLogContext() {
return null;
}
}

@ -1,630 +0,0 @@
package com.engine.kq.cmd.shiftschedule;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.biz.SimpleBizLogger;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.bean.KqShiftscheduleOperateLog;
import com.engine.kq.biz.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.conn.BatchRecordSet;
import weaver.conn.RecordSet;
import weaver.file.ImageFileManager;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.Reminder.KQAutoCardTask;
import weaver.hrm.User;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.text.SimpleDateFormat;
import java.util.*;
public class ImportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
private String today = weaver.common.DateUtil.getCurrentDate();
private SimpleBizLogger logger;
// 添加日志功能
private List<List<Object>> operateLogParams = new ArrayList<>();
// 操作类型 操作人 考勤组名称+id 被修改人 被修改班次日期 被修改班次+id 排班设置行id
private List<Object> operateLogParam = null;
public ImportExcelCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
this.logger = new SimpleBizLogger();
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
BatchRecordSet bRs = new BatchRecordSet();
String sql = "";
try {
//必要的权限判断
if (!HrmUserVarify.checkUserRight("HrmKQGroup:Add", user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
ResourceComInfo resourceComInfo = new ResourceComInfo();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupBiz kqGroupBiz = new KQGroupBiz();
KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo();
String groupId = Util.null2String(params.get("groupId"));
List<String> managerRoleUserIdList = new KqShiftScheduleRoleBiz().getUfKqShiftScheduleRoleValue(""+user.getUID(), groupId);
String filename = Util.null2String(params.get("filename"));
List lsColumn = null;
List<List<Object>> paramInsert = new ArrayList<List<Object>>();
List<List<Object>> paramUpdate = new ArrayList<List<Object>>();
List<Object> param = null;
List<List<Object>> lsFormatParams = new ArrayList<>();
List<Object> formatParams = null;
List<List<Object>> delValidateParams = new ArrayList<>();
List<Object> validateParams = null;
List<List<Object>> lscheckSerialParams = new ArrayList<>();
List<Object> checkSerialParams = null;
Map<String,Object> mapShiftSchedule = new HashMap<>();
Map<String,String> mapSerial = new HashMap<>();
Map<String,String> mapGroupMembersWorkCode = new HashMap<>();
Map<String,String> mapGroupMembersLastName = new HashMap<>();
List<String> serialids=Util.splitString2List(kqGroupComInfo.getSerialids(groupId),",");
if(!serialids.contains("-1"))serialids.add("-1");
for(String serialid : serialids){
if(serialid.equals("-1")){
String restLabel = SystemEnv.getHtmlLabelName(26593, user.getLanguage()).trim();
mapSerial.put(restLabel,serialid);
}else{
mapSerial.put(Util.formatMultiLang(kqShiftManagementComInfo.getSerial(serialid),""+user.getLanguage()),serialid);
}
}
Map<String,Object> params = new HashMap<>();
params.put("groupId",groupId);
params.put("isNoAccount","1");
List<String> kqGroupMembers = kqGroupBiz.getGroupMembers(params);
KqMembersValidateBiz kqMembersValidateBiz = new KqMembersValidateBiz();
Map<String, List<String>> validateResult = new KqMembersValidateBiz(params, user).getKqMembersValidateList();
List<String> excludeidList = new ArrayList<>();
KqShiftscheduleOperateLog bean = null;
boolean needChange = false;
ResourceComInfo rci = new ResourceComInfo();
if(!Util.null2String(kqGroupComInfo.getExcludecount(groupId)).equals("1")) {
String excludeid = Util.null2String(kqGroupComInfo.getExcludeid(groupId));
if (excludeid.length() > 0) {
excludeidList = Util.splitString2List(excludeid,",");
}
}
for(String resourceid : kqGroupMembers){
// 排除无需考勤人员
if(excludeidList != null && excludeidList.contains(resourceid)) {
continue;
}
String workCode = Util.formatMultiLang(Util.null2String(resourceComInfo.getWorkcode(resourceid)),""+user.getLanguage());
String lastName = Util.formatMultiLang(Util.null2String(resourceComInfo.getLastname(resourceid)),""+user.getLanguage());
if(workCode.length()>0){
mapGroupMembersWorkCode.put(workCode,resourceid);
}else if(lastName.length()>0){
mapGroupMembersLastName.put(lastName,resourceid);
}
}
sql = " select id, resourceid, kqdate, serialid from kq_shiftschedule where groupid=? and (isdelete is null or isdelete <> '1') ";
rs.executeQuery(sql,groupId);
while(rs.next()){
mapShiftSchedule.put(rs.getString("kqdate")+"|"+rs.getString("resourceid"),Util.null2String(rs.getString("id"))+"#"+Util.null2String(rs.getString("serialid")));
}
String ssyfDate = "";
List<String> lsGroupMembers = new ArrayList<>();
Map<String,Object> mapShiftScheduleOri = new HashMap<>();
Set<String> unSavePersonAll = new HashSet<>();
int firstRow = 6;
int firstCol = 3;
ImageFileManager manager = new ImageFileManager();
manager.getImageFileInfoById(Util.getIntValue(filename));
//Workbook workbook = WorkbookFactory.create(manager.getInputStream());
Workbook workbook = new XSSFWorkbook(manager.getInputStream());
for (int idx = 0; idx < workbook.getNumberOfSheets(); idx++) {
Sheet sheet = workbook.getSheetAt(idx);
if(sheet.getSheetName().indexOf("constraintDataSheet")>-1)continue;
Row row = null;
Cell cell = null;
row = sheet.getRow(firstRow);
lsColumn = new ArrayList();
for (int cellIndex = firstCol; cellIndex < row.getLastCellNum(); cellIndex++) {
cell = row.getCell((short) cellIndex);
lsColumn.add(Util.null2String(getCellValue(cell)).trim());
}
firstRow++;
for (int i = firstRow; firstRow<=sheet.getLastRowNum() && i <= sheet.getLastRowNum(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
String workCode = Util.null2String(row.getCell(1));//编号
String lastName = Util.null2String(row.getCell(2));//姓名
if(workCode.length()==0 && lastName.length()==0){
continue;
}
String resourceId = Util.null2String(mapGroupMembersWorkCode.get(workCode));//人员id
if(resourceId.length()==0){
resourceId = Util.null2String(mapGroupMembersLastName.get(lastName));//人员id
}
if(resourceId.length()==0)continue;
if(!managerRoleUserIdList.isEmpty()) {
if(!managerRoleUserIdList.contains(resourceId)) continue;
}
lsGroupMembers.add(resourceId);
for (int cellIndex = firstCol; cellIndex < row.getLastCellNum(); cellIndex++) {
cell = row.getCell((short) cellIndex);
if (cell == null) continue;
String serialId = "";
String serialName = Util.null2String(getCellValue(cell)).trim();
if(serialName.length()==0)continue;
String kqdate = Util.null2String(lsColumn.get(cellIndex-firstCol));
kqdate = kqdate.trim().replace(String.valueOf((char)10), "#");
kqdate = kqdate.split("#")[0];
if(!SaveShiftScheduleCmd.isDate(kqdate)) {
continue;
}
//if(weaver.common.DateUtil.timeInterval(kqdate,today)>0)continue;//今天之前的无需处理
serialId = Util.null2String(mapSerial.get(serialName));
if(serialId.length()==0)continue;
String shiftScheduleValue = Util.null2String(mapShiftSchedule.get(kqdate+"|"+resourceId));
String id = "";
String oldSerialid = "";
if(!"".equals(shiftScheduleValue)) {
id = shiftScheduleValue.split("#")[0];
oldSerialid = shiftScheduleValue.split("#")[1];
}
// 如果超过了有效期,就不存储数据
List<String> validateList = validateResult.get(resourceId);
boolean isInRange = kqMembersValidateBiz.isInRange(kqdate, validateList);
if(!isInRange && oldSerialid.length() > 0) {
validateParams = new ArrayList<>();
validateParams.add(resourceId);
validateParams.add(kqdate);
delValidateParams.add(validateParams);
lsFormatParams.add(validateParams);
bean = new KqShiftscheduleOperateLog(2,user.getLastname(),kqGroupComInfo.getGroupname(groupId)+"(id:"+groupId+")",rci.getLastname(resourceId),
kqdate, ("-1".equals(oldSerialid) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftManagementComInfo.getSerial(oldSerialid)+"(id:"+oldSerialid+")"), id, "",user.getLanguage());
addLog(bean);
}
if(id.length()>0 && !oldSerialid.equals(serialId) && oldSerialid.length() > 0){
needChange = true;
param = new ArrayList<Object>();
param.add(serialId);
param.add(id);
param.add(resourceId);
paramUpdate.add(param);
bean = new KqShiftscheduleOperateLog(1, user.getLastname(), kqGroupComInfo.getGroupname(groupId) + "(id:" + groupId + ")", rci.getLastname(resourceId),
kqdate, ("-1".equals(oldSerialid) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftManagementComInfo.getSerial(oldSerialid) + "(id:" + oldSerialid + ")"), id, ("-1".equals(serialId) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftManagementComInfo.getSerial(serialId) + "(id:" + serialId + ")"),user.getLanguage());
addLog(bean);
ssyfDate = kqdate;
mapShiftScheduleOri.put(kqdate+"|"+resourceId,serialId);
}else{
if(!oldSerialid.equals(serialId)) {
needChange = true;
param = new ArrayList<Object>();
param.add(kqdate);
param.add(serialId);
param.add(resourceId);
param.add(groupId);
paramInsert.add(param);
bean = new KqShiftscheduleOperateLog(0, user.getLastname(), kqGroupComInfo.getGroupname(groupId) + "(id:" + groupId + ")", rci.getLastname(resourceId),
kqdate, "", id, ("-1".equals(serialId) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftManagementComInfo.getSerial(serialId) + "(id:" + serialId + ")"), user.getLanguage());
addLog(bean);
ssyfDate = kqdate;
mapShiftScheduleOri.put(kqdate+"|"+resourceId,serialId);
}
}
if(needChange) {
formatParams = new ArrayList<>();
formatParams.add(resourceId);
formatParams.add(kqdate);
lsFormatParams.add(formatParams);
checkSerialParams = new ArrayList<>();
checkSerialParams.add(resourceId);
checkSerialParams.add(kqdate);
checkSerialParams.add(serialId);
lscheckSerialParams.add(checkSerialParams);
}
}
}
BaseBean bb = new BaseBean();
String fromDate = TimeUtil.getMonthBeginDay(ssyfDate);
String toDate = TimeUtil.getMonthEndDay(ssyfDate);
List<String> lsDateNew = new ArrayList<>();
Calendar calNew = weaver.common.DateUtil.getCalendar();
boolean isEndNew = false;
for(String date=fromDate; !isEndNew;) {
if(date.equals(toDate)) isEndNew = true;
lsDateNew.add(date);
calNew.setTime(weaver.common.DateUtil.parseToDate(date));
date = weaver.common.DateUtil.getDate(calNew.getTime(), 1);
}
Map<String,Object> mapShiftScheduleAll = new HashMap<>();
Set<String> unSavePerson = new HashSet<>();
//上四休二校验,生成预排班数据结构
for(String resourceid:lsGroupMembers){
Map<String,Object> mapShiftScheduleChild = new HashMap<>();
String sqlChild = " select id, resourceid, kqdate,serialid from kq_shiftschedule where (isdelete is null or isdelete <> '1') and groupid=? ";
//有客户提下面的sql有性能问题在表数据较多并且该表数据改动较为频率不适合建索引所以对mapShiftSchedule先缓存的数据范围过滤下没必要全表缓存
sqlChild += " and kqdate>='"+fromDate+"' and kqdate<='"+toDate+"' ";
rs.executeQuery(sqlChild,groupId);
while(rs.next()){
mapShiftScheduleChild.put(rs.getString("kqdate")+"|"+rs.getString("resourceid"),rs.getString("serialid"));
}
//生成这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcidNew = Util.null2String(mapShiftScheduleOri.get(date+"|"+resourceid));
if(StringUtils.isNotBlank(bcidNew)){
//本次排班预生成班次id
mapShiftScheduleAll.put(date+"|"+resourceid,bcidNew);
}else{
//本次排班未预生成id检查历史生成的班次id若历史也没有生效班次且当天不是节假日则不让保存
String bcidOld = Util.null2String(mapShiftScheduleChild.get(date+"|"+resourceid));
if(StringUtils.isNotBlank(bcidOld)){
mapShiftScheduleAll.put(date+"|"+resourceid,bcidOld);
}else{
int changeType = getChangeType(groupId, date);
if(changeType != 1){
//该人员不让保存
unSavePerson.add(resourceid);
}
}
}
}
}
bb.writeLog("unSavePerson"+ JSONObject.toJSONString(unSavePerson));
bb.writeLog("mapShiftScheduleAll"+JSONObject.toJSONString(mapShiftScheduleAll));
// 校验是否满足上四休二规则从当月第一个连续两天的休息班作为锚点判断此休息班前后排班是否满足固定4天工作+2天休息的模式
// 如果当月存在法定节假日则默认跳过后继续排班。例如:周三为节假日,且当周一为第一天工作日,那么当周的排班结果为:周一~周二:
// 2天工作日、周三跳过、周四~周五2天工作日、周六周日2天休息班
for(String resourceid:lsGroupMembers){
bb.writeLog("resourceid"+resourceid);
//遍历这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcid = Util.null2String(mapShiftScheduleAll.get(date+"|"+resourceid));
bb.writeLog("date"+date+"bcid"+bcid);
if(StringUtils.isNotBlank(bcid)){
//班次是否是休息班,是的话往后判断是否是两个连续休息班
boolean checkXxb = checkXxr(bcid);
if(checkXxb){
//是休息班,往后找
bb.writeLog("是休息班,往后找");
boolean findNextXxb = true;
Integer day = 1;
while (findNextXxb){
calNew.setTime(weaver.common.DateUtil.parseToDate(date));
String dateNext = weaver.common.DateUtil.getDate(calNew.getTime(), day);
day++;
String bcidNext = Util.null2String(mapShiftScheduleAll.get(dateNext+"|"+resourceid));
bb.writeLog("dateNext"+dateNext+"day"+day+"bcidNext"+bcidNext);
if(StringUtils.isNotBlank(bcidNext)){
//找到了第一个有班次的
bb.writeLog("找到了第一个有班次的");
findNextXxb = false;
boolean checkXxbNext = checkXxr(bcidNext);
if(checkXxbNext){
//再往后找一个班次,该班次需要为工作日
//是休息班,往后找
bb.writeLog("也是休息班,再往后找");
boolean findNextXxb1 = true;
Integer day1 = 1;
while (findNextXxb1){
calNew.setTime(weaver.common.DateUtil.parseToDate(dateNext));
String dateNext1 = weaver.common.DateUtil.getDate(calNew.getTime(), day1);
day1++;
String bcidNext1 = Util.null2String(mapShiftScheduleAll.get(dateNext1+"|"+resourceid));
bb.writeLog("bcidNext1"+bcidNext1+"dateNext1"+dateNext1+"day1"+day1);
if(StringUtils.isNotBlank(bcidNext1)){
//不往后找了
boolean checkXxbNext1 = checkXxr(bcidNext1);
findNextXxb1 = false;
bb.writeLog("checkXxbNext1"+checkXxbNext1);
if(checkXxbNext1){
//存在三个连续的休息班,不符合上四休二
bb.writeLog("存在三个连续的休息班,不符合上四休二");
unSavePerson.add(resourceid);
}else{
i++;
}
}else{
i++;
}
//到最后一天也没找到,暂不处理
if(weaver.common.DateUtil.timeInterval(toDate,dateNext1)>=0){
findNextXxb1 = false;
}
}
//将date作为一个锚点往前找并判断是否满足上四休二
boolean findBefore = true;
Integer dayB = -1;
//工作班数量
Integer gzbnum = 0;
//判断前面是否还有休息班标识
Integer xxbNo = 0;
while (findBefore){
calNew.setTime(weaver.common.DateUtil.parseToDate(date));
String dateBefore = weaver.common.DateUtil.getDate(calNew.getTime(), dayB);
dayB--;
String bcidBefore = Util.null2String(mapShiftScheduleAll.get(dateBefore+"|"+resourceid));
bb.writeLog("bcidBefore"+bcidBefore+"dateBefore"+dateBefore+"dayB"+dayB);
if(StringUtils.isNotBlank(bcidBefore)){
boolean checkXxbBefore = checkXxr(bcidBefore);
if(checkXxbBefore){
//找到了第一个休息班,判断间隔了多少个非休息班,不再找了
bb.writeLog("找到了第一个休息班,判断间隔了多少个非休息班,不再找了");
findBefore = false;
xxbNo = 1;
}else{
gzbnum ++;
}
}
//找到月初一号了,不找了
if(weaver.common.DateUtil.timeInterval(dateBefore,fromDate)>=0){
findBefore = false;
}
}
bb.writeLog("gzbnum"+gzbnum);
if(xxbNo == 1){
//当前锚点前面有休息班若间隔工作班数量不为4则不符合
if(gzbnum != 4){
bb.writeLog("当前锚点前面有休息班若间隔工作班数量不为4则不符合");
unSavePerson.add(resourceid);
}
}else{
//当前锚点是第一个休息班
if(gzbnum>4){
//锚点往前有超过四个工作班,不符合
bb.writeLog("当前锚点是第一个休息班,锚点往前有超过四个工作班,不符合");
unSavePerson.add(resourceid);
}
}
}else{
//找到的不是休息班,也认为不符合上四休二
bb.writeLog("找到的不是休息班,也认为不符合上四休二");
unSavePerson.add(resourceid);
}
}else{
i++;
}
//到最后一天也没找到,暂不处理
if(weaver.common.DateUtil.timeInterval(toDate,dateNext)>=0){
findNextXxb = false;
}
}
}
}
}
}
bb.writeLog("unSavePerson"+JSONObject.toJSONString(unSavePerson));
unSavePersonAll.addAll(unSavePerson);
sql = " update kq_shiftschedule set serialid=?, isDelete=0 where id = ? ";
for (int i = 0; paramUpdate != null && i < paramUpdate.size(); i++) {
List<Object> update_params = paramUpdate.get(i);
String serialid = Util.null2String(update_params.get(0));
String id = Util.null2String(update_params.get(1));
String resourceid = Util.null2String(update_params.get(2));
if(unSavePerson.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, serialid,id);
}
}
sql = "insert into kq_shiftschedule (kqdate,serialid,resourceid,groupid,isDelete) values(?,?,?,?,0)";
for (int i = 0; paramInsert != null && i < paramInsert.size(); i++) {
List<Object> insert_params = paramInsert.get(i);
String kqdate = Util.null2String(insert_params.get(0));
String serialid = Util.null2String(insert_params.get(1));
String resourceid = Util.null2String(insert_params.get(2));
String groupid = Util.null2String(insert_params.get(3));
if(unSavePerson.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, kqdate,serialid,resourceid,groupid);
}
}
}
// 删除一些有效期之后的排班
sql = " update kq_shiftschedule set isdelete =1 where resourceid = ? and kqdate = ? and groupid = "+groupId;
for (List<Object> delete_params : delValidateParams) {
String resourceid = Util.null2String(delete_params.get(0));
String kqdate = Util.null2String(delete_params.get(1));
if(unSavePersonAll.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid, kqdate);
}
}
//删除之前的排的班次,一天只能有一个班次
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? and groupid != "+groupId;
for (int i = 0; lsFormatParams != null && i < lsFormatParams.size(); i++) {
List<Object> delete_params = lsFormatParams.get(i);
String resourceid = Util.null2String(delete_params.get(0));
String kqdate = Util.null2String(delete_params.get(1));
if(unSavePersonAll.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate);
}
}
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? and serialid != ? ";
for (int i = 0; lscheckSerialParams != null && i < lscheckSerialParams.size(); i++) {
List<Object> check_params = lscheckSerialParams.get(i);
String resourceid = Util.null2String(check_params.get(0));
String kqdate = Util.null2String(check_params.get(1));
String serialid = Util.null2String(check_params.get(2));
if(unSavePersonAll.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate,serialid);
}
}
sql = "insert into kq_shiftscheduleoperate_log(operatetype,operator,kqgroupname,changeduser,changedshiftdate,changedshiftname,kqshiftid) values(?,?,?,?,?,?,?)";
bRs.executeBatchSqlNew(sql, operateLogParams);
new KQShiftScheduleComInfo().removeCache();
//刷新报表数据
// sql = " insert into kq_format_pool (resourceid, kqdate) values (?,?)";
// bRs.executeBatchSql(sql, lsFormatParams);
new KQFormatBiz().format(lsFormatParams,16);
KQGroupComInfo kQGroupComInfo = new KQGroupComInfo();
String auto_checkout = kQGroupComInfo.getAuto_checkout(groupId);
String auto_checkin = kQGroupComInfo.getAuto_checkin(groupId);
if("1".equalsIgnoreCase(auto_checkin) || "1".equalsIgnoreCase(auto_checkout)){
//如果开启了自动打卡,保存考勤组成员之后需要格式化下缓存
KQAutoCardTask kqAutoCardTask = new KQAutoCardTask();
kqAutoCardTask.initAutoCardTask(groupId);
}
if(unSavePersonAll.size()>0){
List<String> personNameList = new ArrayList<>();
for(String personid:unSavePersonAll){
personNameList.add(resourceComInfo.getLastname(personid));
}
retmap.put("status", "-1");
retmap.put("message", "【"+StringUtils.join(personNameList,",")+"】上述员工当前月份排班不符合做四休二规则或存在班次为空的日期");
return retmap;
}
retmap.put("status", "1");
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
writeLog(e);
}
return retmap;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public List<BizLogContext> getLogContexts() {
return logger.getBizLogContexts();
}
/**
* /**
* excel
*
* @param cell
* @return
*/
public String getCellValue(Cell cell) {
String cellValue = "";
if (cell == null)
return "";
switch (cell.getCellType()) {
case BOOLEAN: // 得到Boolean对象的方法
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {// 先看是否是日期格式
SimpleDateFormat sft = new SimpleDateFormat("yyyy-MM-dd");
cellValue = String.valueOf(sft.format(cell.getDateCellValue())); // 读取日期格式
} else {
cellValue = String.valueOf(new Double(cell.getNumericCellValue())); // 读取数字
if (cellValue.endsWith(".0"))
cellValue = cellValue.substring(0, cellValue.indexOf("."));
}
break;
case FORMULA: // 读取公式
cellValue = cell.getCellFormula();
break;
case STRING: // 读取String
cellValue = cell.getStringCellValue();
break;
}
return cellValue;
}
private void addLog(KqShiftscheduleOperateLog bean) {
operateLogParam = new ArrayList<>();
operateLogParam.add(bean.getOperatetype());
operateLogParam.add(bean.getOperator());
operateLogParam.add(bean.getKqgroupname());
operateLogParam.add(bean.getChangeduser());
operateLogParam.add(bean.getChangedshiftdate());
operateLogParam.add(bean.getChangedshiftname());
operateLogParam.add(bean.getKqshiftid());
operateLogParams.add(operateLogParam);
}
/**
* ()
*
* @param groupId ID
* @param date
* @return 1-2-3--1-
*/
public static int getChangeType(String groupId, String date) {
int changeType = -1;//默认没有设置过节假日(节假日设置的类型1-公众假日、2-调配工作日、3-调配休息日)
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
String tmpChangetype = kqHolidaySetComInfo.getChangeType(groupId, date);
if(null != tmpChangetype){
changeType = Util.getIntValue(tmpChangetype, -1);
}
return changeType;
}
/**
*
* @param serialid
* @return
*/
private static Boolean checkXxr(String serialid){
RecordSet rs = new RecordSet();
String sql = "select * from kq_ShiftManagement where id = "+serialid+" and is_rest = 1";
rs.execute(sql);
Boolean check = false;
if (rs.getCounts()>0){
check = true;
}
return check;
}
}

@ -1,789 +0,0 @@
package com.engine.kq.cmd.shiftschedule;
import com.alibaba.fastjson.JSON;
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.*;
import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit;
import com.engine.kq.util.UtilKQ;
import com.ibm.db2.jcc.uw.bb;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.BatchRecordSet;
import weaver.conn.DBUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
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 SaveBatchShiftScheduleCmd extends AbstractCommonCommand<Map<String, Object>> {
private SimpleBizLogger logger;
public SaveBatchShiftScheduleCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
this.logger = new SimpleBizLogger();
String data = Util.null2String(params.get("data"));
JSONObject jsonObj = JSON.parseObject(data);
String groupId = Util.null2String(jsonObj.get("groupId"));//考勤组id
BizLogContext bizLogContext = new BizLogContext();
bizLogContext.setLogType(BizLogType.HRM_ENGINE);//模块类型
bizLogContext.setBelongType(BizLogSmallType4Hrm.HRM_ENGINE_Schedule_Set);//所属大类型
bizLogContext.setLogSmallType(BizLogSmallType4Hrm.HRM_ENGINE_Schedule_Set);//当前小类型
bizLogContext.setParams(params);//当前request请求参数
logger.setUser(user);//当前操作人
String mainSql = "select * from kq_group where id = " + groupId + " and (isdelete is null or isdelete <> '1') ";
logger.setMainSql(mainSql, "id");//主表sql
logger.setMainPrimarykey("id");//主日志表唯一key
logger.setMainTargetNameColumn("groupname");
SimpleBizLogger.SubLogInfo subLogInfo1 = logger.getNewSubLogInfo();
String subSql1 = "select * from kq_shiftschedule where groupid = " + groupId + " and (isdelete is null or isdelete <> '1') ";
subLogInfo1.setSubSql(subSql1,"id");
logger.addSubLogInfo(subLogInfo1);
logger.before(bizLogContext);
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
BatchRecordSet bRs = new BatchRecordSet();
String today = DateUtil.getCurrentDate();
String sql = "";
try{
//必要的权限判断
if(!HrmUserVarify.checkUserRight("HrmKQGroup:Add",user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
ResourceComInfo resourceComInfo = new ResourceComInfo();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupBiz kqGroupBiz = new KQGroupBiz();
String data = Util.null2String(params.get("data"));
JSONObject jsonObj = JSON.parseObject(data);
String groupId = Util.null2String(jsonObj.get("groupId"));//考勤组id
String shiftScheduleType = Util.null2String(jsonObj.get("shiftScheduleType"));//排班类型
String shiftScheduleDate = Util.null2String(jsonObj.get("shiftScheduleDate"));//排班日期
String shiftScheduleBeginDate = Util.null2String(jsonObj.get("shiftScheduleBeginDate"));//排班开始日期
String shiftScheduleEndDate = Util.null2String(jsonObj.get("shiftScheduleEndDate"));//排班结束日期
String shiftScheduleMemberType = Util.null2String(jsonObj.get("shiftScheduleMemberType"));//排班人员类型
String shiftScheduleMember = Util.null2String(jsonObj.get("shiftScheduleMember"));//排班人员
String holidayType = Util.null2String(jsonObj.get("holidayType"));//遇双休日
String meetHolidays = Util.null2String(jsonObj.get("meetHolidays"));//遇节假日
String meetRestDays = Util.null2String(jsonObj.get("meetRestDays"));//遇调配休息日
String serialId = Util.null2String(jsonObj.get("serialId"));//班次
String shiftcycleId = Util.null2String(jsonObj.get("shiftcycleId"));//排班周期Id
String meetworkDays = Util.null2String(jsonObj.get("meetworkDays"));//遇调配工作日
String serialIdSx = Util.null2String(jsonObj.get("serialIdSx"));//双休班次
String serialIdJjr = Util.null2String(jsonObj.get("serialIdJjr"));//节假日班次
String serialIdXxr = Util.null2String(jsonObj.get("serialIdXxr"));//调配休息日班次
String serialIdGzr = Util.null2String(jsonObj.get("serialIdGzr"));//调配工作日班次
// 某个管理员所拥有的维护人员的权限
List<String> managerRoleUserIdList = new KqShiftScheduleRoleBiz().getUfKqShiftScheduleRoleValue(""+user.getUID(), groupId);
KqMembersValidateBiz kqMembersValidateBiz = new KqMembersValidateBiz();
Map<String, Object> paramsValidate = new HashMap<>();
paramsValidate.put("groupId",groupId);
paramsValidate.put("isNoAccount","1");
if("2".equals(shiftScheduleMemberType)) { // 按人员排班
paramsValidate.put("resourceId",shiftScheduleMember);
}
Map<String, List<String>> validateResult = new KqMembersValidateBiz(paramsValidate, user).getKqMembersValidateList();
List<List<Object>> paramInsert = new ArrayList<List<Object>>();
List<List<Object>> paramUpdate = new ArrayList<List<Object>>();
List<Object> params = null;
String delIds = "";
List<List<Object>> lsFormatParams = new ArrayList<>();
List<Object> formatParams = new ArrayList<>();
List<List<Object>> lsDeleteParams = new ArrayList<>();
List<Object> deleteParams = null;
List<List<Object>> lscheckSerialParams = new ArrayList<>();
List<Object> checkSerialParams = new ArrayList<>();
List<List<Object>> lsDeleteCancelParams = new ArrayList<>();
List<Object> deleteCancelParams = null;
List<String> lsGroupMembers = null;
if(shiftScheduleMemberType.equals("1")){//所有考勤组成员
lsGroupMembers = kqGroupBiz.getGroupMembers(groupId);
}else{//考勤组成员
lsGroupMembers = Util.splitString2List(shiftScheduleMember,",");
}
List<String> excludeidList = new ArrayList<>();
if(!Util.null2String(kqGroupComInfo.getExcludecount(groupId)).equals("1")) {
String excludeid = Util.null2String(kqGroupComInfo.getExcludeid(groupId));
if (excludeid.length() > 0) {
excludeidList = Util.splitString2List(excludeid,",");
}
}
String oriDate = "";
Map<String,Object> mapShiftSchedule = new HashMap<>();
Map<String,Object> mapShiftScheduleOri = new HashMap<>();
sql = " select id, resourceid, kqdate from kq_shiftschedule where (isdelete is null or isdelete <> '1') and groupid=? ";
//有客户提下面的sql有性能问题在表数据较多并且该表数据改动较为频率不适合建索引所以对mapShiftSchedule先缓存的数据范围过滤下没必要全表缓存
if("1".equals(shiftScheduleType)){//按天排班
sql += " and kqdate='"+shiftScheduleDate+"' ";
oriDate = shiftScheduleDate;
}else if("2".equals(shiftScheduleType)){
sql += " and kqdate>='"+shiftScheduleBeginDate+"' and kqdate<='"+shiftScheduleEndDate+"' ";
oriDate = shiftScheduleBeginDate;
}
rs.executeQuery(sql,groupId);
while(rs.next()){
mapShiftSchedule.put(rs.getString("kqdate")+"|"+rs.getString("resourceid"),rs.getString("id"));
}
String id = "";
if(shiftScheduleType.equals("1")){//按天排班
for(String resourceid:lsGroupMembers){
// 排除无需考勤人员
if(excludeidList != null && excludeidList.contains(resourceid)) {
continue;
}
if(!managerRoleUserIdList.isEmpty()) {
if(!managerRoleUserIdList.contains(resourceid)) {
continue;
}
}
id = Util.null2String(mapShiftSchedule.get(shiftScheduleDate+"|"+resourceid));
// 如果超过了有效期,就不存储数据
List<String> validateList = validateResult.get(resourceid);
boolean isInRange = kqMembersValidateBiz.isInRange(shiftScheduleDate, validateList);
if(!isInRange) {
if(delIds.length()>0)delIds+=",";
delIds+=id;
continue;
}
//if(weaver.common.DateUtil.timeInterval(shiftScheduleDate,today)>0)continue;//今天之前的无需处理
if(id.length()>0){
if(serialId.length()==0){
if(delIds.length()>0)delIds+=",";
delIds+=id;
}else {
params = new ArrayList<Object>();
params.add(serialId);
params.add(id);
params.add(shiftScheduleDate);
params.add(resourceid);
paramUpdate.add(params);
}
}else{
if(serialId.length()==0)continue;;
params = new ArrayList<Object>();
params.add(shiftScheduleDate);
params.add(serialId);
params.add(resourceid);
params.add(groupId);
paramInsert.add(params);
}
if(DateUtil.timeInterval(shiftScheduleDate,today)>=0) {
formatParams = new ArrayList<>();
formatParams.add(resourceid);
formatParams.add(shiftScheduleDate);
lsFormatParams.add(formatParams);
}
deleteParams = new ArrayList<>();
deleteParams.add(resourceid);
deleteParams.add(shiftScheduleDate);
lsDeleteParams.add(deleteParams);
checkSerialParams = new ArrayList<>();
checkSerialParams.add(resourceid);
checkSerialParams.add(shiftScheduleDate);
checkSerialParams.add(serialId);
lscheckSerialParams.add(checkSerialParams);
mapShiftScheduleOri.put(shiftScheduleDate+"|"+resourceid,serialId);
}
}else if(shiftScheduleType.equals("2")){//按周期排班
List<String> lsDate = new ArrayList<>();
Calendar cal = DateUtil.getCalendar();
writeLog("shiftScheduleBeginDate==" + shiftScheduleBeginDate + "shiftScheduleEndDate==" + shiftScheduleEndDate);
if (DateUtil.timeInterval(shiftScheduleEndDate, shiftScheduleBeginDate) > 0)
{
retmap.put("status", "-1");
retmap.put("message", ""+ SystemEnv.getHtmlLabelName(10005344,weaver.general.ThreadVarLanguage.getLang())+"");
return retmap;
}
int shiftcycleday = 0;
String[] shiftcycleserialids = null;
sql = "select shiftcycleday,shiftcycleserialids from kq_group_shiftcycle where id = ? order by id asc ";
rs.executeQuery(sql,shiftcycleId);
if(rs.next()){
shiftcycleday = rs.getInt("shiftcycleday");
shiftcycleserialids = Util.splitString(Util.null2String(rs.getString("shiftcycleserialids")), ",");
}
boolean isEnd = false;
for(String date=shiftScheduleBeginDate; !isEnd;) {
if(date.equals(shiftScheduleEndDate)) isEnd = true;
lsDate.add(date);
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
for(String resourceid:lsGroupMembers){
// 排除无需考勤人员
if(excludeidList != null && excludeidList.contains(resourceid)) {
continue;
}
if(!managerRoleUserIdList.isEmpty()) {
if(!managerRoleUserIdList.contains(resourceid)) {
continue;
}
}
boolean needShiftSchedule = false;
int dayCount = 0;
for(int i=0;i<lsDate.size();i++) {
//if(weaver.common.DateUtil.timeInterval(date,today)>0)continue;//今天之前的无需处理
String date = lsDate.get(i);
id = Util.null2String(mapShiftSchedule.get(date+"|"+resourceid));
// 如果超过了有效期,就不存储数据
List<String> validateList = validateResult.get(resourceid);
boolean isInRange = kqMembersValidateBiz.isInRange(date, validateList);
if(!isInRange) {
if(delIds.length()>0)delIds+=",";
delIds+=id;
continue;
}
needShiftSchedule = true;
int changeType= KQHolidaySetBiz.getChangeType(groupId, date);
if (changeType != 1 && changeType != 3 && holidayType.equals("2")) {//遇双休日继续排班
int weekDay = DateUtil.getWeek(date);
if(weekDay>5){
needShiftSchedule = false;
}
}
if(meetHolidays.equals("2")){//遇节假日继续排班
if(changeType==1){
needShiftSchedule = false;
}
}
if(meetRestDays.equals("2")){//遇调配休息日继续排班
if(changeType==3){
needShiftSchedule = false;
}
}
if(meetworkDays.equals("2")){//遇调配工作日日继续排班
if(changeType==2){
needShiftSchedule = false;
}
}
if(needShiftSchedule){
dayCount++;
int idx = dayCount % shiftcycleday;
if (idx == 0) {//周期最后一天
serialId = Util.null2String(shiftcycleserialids[shiftcycleserialids.length - 1]);
} else {
serialId = Util.null2String(shiftcycleserialids[idx-1]);
}
new BaseBean().writeLog("serialId中"+serialId);
if (changeType !=1 && changeType != 3 && holidayType.equals("3")) {//遇双休日指定排班
int weekDay = DateUtil.getWeek(date);
if(weekDay>5){
serialId = serialIdSx;
}
}
if(meetHolidays.equals("3")){//遇节假日指定排班
if(changeType == 1){
serialId = serialIdJjr;
}
}
if(meetRestDays.equals("3")){//遇调配休息日指定排班
if(changeType == 3){
serialId = serialIdXxr;
}
}
if(meetworkDays.equals("3")){//遇调配工作日指定排班
if(changeType == 2){
serialId = serialIdGzr;
}
}
new BaseBean().writeLog("serialId后"+serialId);
if(id.length()>0){
if(serialId.length()==0){
if(delIds.length()>0)delIds+=",";
delIds+=id;
}else {
params = new ArrayList<Object>();
params.add(serialId);
params.add(id);
params.add(date);
params.add(resourceid);
paramUpdate.add(params);
}
}else{
if(serialId.length()>0){
params = new ArrayList<Object>();
params.add(date);
params.add(serialId);
params.add(resourceid);
params.add(groupId);
paramInsert.add(params);
}
}
mapShiftScheduleOri.put(date+"|"+resourceid,serialId);
}else{
deleteCancelParams = new ArrayList<>();
deleteCancelParams.add(resourceid);
deleteCancelParams.add(date);
lsDeleteCancelParams.add(deleteCancelParams);
}
if(DateUtil.timeInterval(date,today)>=0) {
formatParams = new ArrayList<>();
formatParams.add(resourceid);
formatParams.add(date);
lsFormatParams.add(formatParams);
}
deleteParams = new ArrayList<>();
deleteParams.add(resourceid);
deleteParams.add(date);
lsDeleteParams.add(deleteParams);
checkSerialParams = new ArrayList<>();
checkSerialParams.add(resourceid);
checkSerialParams.add(shiftScheduleDate);
checkSerialParams.add(serialId);
lscheckSerialParams.add(checkSerialParams);
}
}
}
//二开获取排班校验规则
String getPbCheckValue = getpbCheckValue(groupId);
BaseBean bb = new BaseBean();
String fromDate = TimeUtil.getMonthBeginDay(oriDate);
String toDate = TimeUtil.getMonthEndDay(oriDate);
List<String> lsDateNew = new ArrayList<>();
Calendar calNew = DateUtil.getCalendar();
boolean isEndNew = false;
for(String date=fromDate; !isEndNew;) {
if(date.equals(toDate)) isEndNew = true;
lsDateNew.add(date);
calNew.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(calNew.getTime(), 1);
}
Map<String,Object> mapShiftScheduleAll = new HashMap<>();
Set<String> unSavePerson = new HashSet<>();
if("3".equals(getPbCheckValue) || "2".equals(getPbCheckValue)){
//上四休二校验,生成预排班数据结构
for(String resourceid:lsGroupMembers){
Map<String,Object> mapShiftScheduleChild = new HashMap<>();
String sqlChild = " select id, resourceid, kqdate,serialid from kq_shiftschedule where (isdelete is null or isdelete <> '1') and groupid=? ";
//有客户提下面的sql有性能问题在表数据较多并且该表数据改动较为频率不适合建索引所以对mapShiftSchedule先缓存的数据范围过滤下没必要全表缓存
sqlChild += " and kqdate>='"+fromDate+"' and kqdate<='"+toDate+"' ";
rs.executeQuery(sqlChild,groupId);
while(rs.next()){
mapShiftScheduleChild.put(rs.getString("kqdate")+"|"+rs.getString("resourceid"),rs.getString("serialid"));
}
//生成这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcidNew = Util.null2String(mapShiftScheduleOri.get(date+"|"+resourceid));
if(StringUtils.isNotBlank(bcidNew)){
//本次排班预生成班次id
mapShiftScheduleAll.put(date+"|"+resourceid,bcidNew);
}else{
//本次排班未预生成id检查历史生成的班次id若历史也没有生效班次且当天不是节假日则不让保存
String bcidOld = Util.null2String(mapShiftScheduleChild.get(date+"|"+resourceid));
if(StringUtils.isNotBlank(bcidOld)){
mapShiftScheduleAll.put(date+"|"+resourceid,bcidOld);
}else{
int changeType = getChangeType(groupId, date);
if(changeType != 1){
//该人员不让保存
unSavePerson.add(resourceid);
}
}
}
}
}
bb.writeLog("unSavePerson"+JSONObject.toJSONString(unSavePerson));
bb.writeLog("mapShiftScheduleAll"+JSONObject.toJSONString(mapShiftScheduleAll));
if("2".equals(getPbCheckValue)){
//获取当月正常工作天数
Integer xcqtsAll = 0;
for (String date : lsDateNew) {
Integer zcgzts = 0;
KQHolidaySetComInfo holidaySetComInfo = new KQHolidaySetComInfo();
String changeTypeNew = holidaySetComInfo.getChangeType(groupId, date);
if("2".equals(changeTypeNew)){
//调配工作日计正常工作天数
zcgzts = 1;
}
if(DateUtil.getWeek(date) != 6 && DateUtil.getWeek(date) != 7){
//不为周六周日
if(!"1".equals(changeTypeNew) && !"3".equals(changeTypeNew)){
//不为节假日和休息日
zcgzts = 1;
}
}
xcqtsAll = xcqtsAll+zcgzts;
}
bb.writeLog("xcqtsAll"+xcqtsAll);
for(String resourceid:lsGroupMembers){
bb.writeLog("resourceid"+resourceid);
Integer bcNum = 0;
//遍历这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcid = Util.null2String(mapShiftScheduleAll.get(date+"|"+resourceid));
bb.writeLog("dateTwo"+date+"bcid"+bcid);
if(StringUtils.isNotBlank(bcid)){
//班次是否是休息班,是的话往后判断是否是两个连续休息班
boolean checkXxb = checkXxr(bcid);
if(checkXxb){
//是休息班,不统计
bb.writeLog("是休息班,不统计");
}else{
//是工作班,统计
bb.writeLog("是工作班,统计");
bcNum++;
}
}
}
bb.writeLog("bcNum"+bcNum);
if(bcNum != xcqtsAll){
//当月日历工作日天数+调配工作日天数必须等于当月工作班天数,不等于则不让保存
unSavePerson.add(resourceid);
}
}
}
if("3".equals(getPbCheckValue)){
// 校验是否满足上四休二规则从当月第一个连续两天的休息班作为锚点判断此休息班前后排班是否满足固定4天工作+2天休息的模式
// 如果当月存在法定节假日则默认跳过后继续排班。例如:周三为节假日,且当周一为第一天工作日,那么当周的排班结果为:周一~周二:
// 2天工作日、周三跳过、周四~周五2天工作日、周六周日2天休息班
for(String resourceid:lsGroupMembers){
bb.writeLog("resourceid"+resourceid);
//遍历这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcid = Util.null2String(mapShiftScheduleAll.get(date+"|"+resourceid));
bb.writeLog("date"+date+"bcid"+bcid);
if(StringUtils.isNotBlank(bcid)){
//班次是否是休息班,是的话往后判断是否是两个连续休息班
boolean checkXxb = checkXxr(bcid);
if(checkXxb){
//是休息班,往后找
bb.writeLog("是休息班,往后找");
boolean findNextXxb = true;
Integer day = 1;
while (findNextXxb){
calNew.setTime(DateUtil.parseToDate(date));
String dateNext = DateUtil.getDate(calNew.getTime(), day);
day++;
String bcidNext = Util.null2String(mapShiftScheduleAll.get(dateNext+"|"+resourceid));
bb.writeLog("dateNext"+dateNext+"day"+day+"bcidNext"+bcidNext);
if(StringUtils.isNotBlank(bcidNext)){
//找到了第一个有班次的
bb.writeLog("找到了第一个有班次的");
findNextXxb = false;
boolean checkXxbNext = checkXxr(bcidNext);
if(checkXxbNext){
//再往后找一个班次,该班次需要为工作日
//是休息班,往后找
bb.writeLog("也是休息班,再往后找");
boolean findNextXxb1 = true;
Integer day1 = 1;
while (findNextXxb1){
calNew.setTime(DateUtil.parseToDate(dateNext));
String dateNext1 = DateUtil.getDate(calNew.getTime(), day1);
day1++;
String bcidNext1 = Util.null2String(mapShiftScheduleAll.get(dateNext1+"|"+resourceid));
bb.writeLog("bcidNext1"+bcidNext1+"dateNext1"+dateNext1+"day1"+day1);
if(StringUtils.isNotBlank(bcidNext1)){
//不往后找了
boolean checkXxbNext1 = checkXxr(bcidNext1);
findNextXxb1 = false;
bb.writeLog("checkXxbNext1"+checkXxbNext1);
if(checkXxbNext1){
//存在三个连续的休息班,不符合上四休二
bb.writeLog("存在三个连续的休息班,不符合上四休二");
unSavePerson.add(resourceid);
}else{
i++;
}
}else{
i++;
}
//到最后一天也没找到,暂不处理
if(DateUtil.timeInterval(toDate,dateNext1)>=0){
findNextXxb1 = false;
}
}
//将date作为一个锚点往前找并判断是否满足上四休二
boolean findBefore = true;
Integer dayB = -1;
//工作班数量
Integer gzbnum = 0;
//判断前面是否还有休息班标识
Integer xxbNo = 0;
while (findBefore){
calNew.setTime(DateUtil.parseToDate(date));
String dateBefore = DateUtil.getDate(calNew.getTime(), dayB);
dayB--;
String bcidBefore = Util.null2String(mapShiftScheduleAll.get(dateBefore+"|"+resourceid));
bb.writeLog("bcidBefore"+bcidBefore+"dateBefore"+dateBefore+"dayB"+dayB);
if(StringUtils.isNotBlank(bcidBefore)){
boolean checkXxbBefore = checkXxr(bcidBefore);
if(checkXxbBefore){
//找到了第一个休息班,判断间隔了多少个非休息班,不再找了
bb.writeLog("找到了第一个休息班,判断间隔了多少个非休息班,不再找了");
findBefore = false;
xxbNo = 1;
}else{
gzbnum ++;
}
}
//找到月初一号了,不找了
if(DateUtil.timeInterval(dateBefore,fromDate)>=0){
findBefore = false;
}
}
bb.writeLog("gzbnum"+gzbnum);
if(xxbNo == 1){
//当前锚点前面有休息班若间隔工作班数量不为4则不符合
if(gzbnum != 4){
bb.writeLog("当前锚点前面有休息班若间隔工作班数量不为4则不符合");
unSavePerson.add(resourceid);
}
}else{
//当前锚点是第一个休息班
if(gzbnum>4){
//锚点往前有超过四个工作班,不符合
bb.writeLog("当前锚点是第一个休息班,锚点往前有超过四个工作班,不符合");
unSavePerson.add(resourceid);
}
}
}else{
//找到的不是休息班,也认为不符合上四休二
bb.writeLog("找到的不是休息班,也认为不符合上四休二");
unSavePerson.add(resourceid);
}
}else{
i++;
}
//到最后一天也没找到,暂不处理
if(DateUtil.timeInterval(toDate,dateNext)>=0){
findNextXxb = false;
}
}
}
}
}
}
bb.writeLog("unSavePerson"+JSONObject.toJSONString(unSavePerson));
}
}
bb.writeLog("paramUpdate"+JSONObject.toJSONString(paramUpdate));
sql = " update kq_shiftschedule set serialid=?,isDelete=0 where id = ? ";
for (int i = 0; paramUpdate != null && i < paramUpdate.size(); i++) {
List<Object> update_params = paramUpdate.get(i);
String serialid = Util.null2String(update_params.get(0));
String tmp_id = Util.null2String(update_params.get(1));
String resourceid = Util.null2String(update_params.get(3));
if(unSavePerson.contains(resourceid) && !"1".equals(getPbCheckValue)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, serialid,tmp_id);
}
}
sql = "insert into kq_shiftschedule (kqdate,serialid,resourceid,groupid,isDelete) values(?,?,?,?,0)";
for (int i = 0; paramInsert != null && i < paramInsert.size(); i++) {
List<Object> insert_params = paramInsert.get(i);
String kqdate = Util.null2String(insert_params.get(0));
String serialid = Util.null2String(insert_params.get(1));
String resourceid = Util.null2String(insert_params.get(2));
String groupid = Util.null2String(insert_params.get(3));
if(unSavePerson.contains(resourceid) && !"1".equals(getPbCheckValue)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, kqdate,serialid,resourceid,groupid);
}
}
if(delIds.length()>0){
List sqlParams = new ArrayList();
Object[] objects= DBUtil.transListIn(delIds,sqlParams);
sql = "update kq_shiftschedule set isdelete =1 where id in("+objects[0]+") ";
rs.executeUpdate(sql, sqlParams);
}
//删除批量排班,遇双休日、节假日、调配工作日的取消排班
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? ";
for (int i = 0; lsDeleteCancelParams != null && i < lsDeleteCancelParams.size(); i++) {
List<Object> delete_params = lsDeleteCancelParams.get(i);
String resourceid = Util.null2String(delete_params.get(0));
String kqdate = Util.null2String(delete_params.get(1));
if(unSavePerson.contains(resourceid) && !"1".equals(getPbCheckValue)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate);
}
}
//删除之前的排的班次,一天只能有一个班次
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? and groupid != "+groupId;
for (int i = 0; lsDeleteParams != null && i < lsDeleteParams.size(); i++) {
List<Object> delete_params = lsDeleteParams.get(i);
String resourceid = Util.null2String(delete_params.get(0));
String kqdate = Util.null2String(delete_params.get(1));
if(unSavePerson.contains(resourceid) && !"1".equals(getPbCheckValue)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate);
}
}
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? and serialid != ? ";
for (int i = 0; lscheckSerialParams != null && i < lscheckSerialParams.size(); i++) {
List<Object> check_params = lscheckSerialParams.get(i);
String resourceid = Util.null2String(check_params.get(0));
String kqdate = Util.null2String(check_params.get(1));
String serialid = Util.null2String(check_params.get(2));
if(unSavePerson.contains(resourceid) && !"1".equals(getPbCheckValue)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate,serialid);
}
}
new KQShiftScheduleComInfo().removeCache();
//刷新报表数据
new KQFormatBiz().format(lsFormatParams);
if(unSavePerson.size()>0 && !"1".equals(getPbCheckValue)){
List<String> personNameList = new ArrayList<>();
for(String personid:unSavePerson){
personNameList.add(resourceComInfo.getLastname(personid));
}
String msg = "";
if("2".equals(getPbCheckValue)){
msg = "做五休二";
}else if("3".equals(getPbCheckValue)){
msg = "做四休二";
}
retmap.put("status", "-1");
retmap.put("message", "【"+StringUtils.join(personNameList,",")+"】上述员工当前月份排班不符合"+msg+"规则或存在未排班日期");
return retmap;
}
retmap.put("status", "1");
retmap.put("message", SystemEnv.getHtmlLabelName(18758, user.getLanguage()));
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
/**
*
* @param serialid
* @return
*/
private static Boolean checkXxr(String serialid){
RecordSet rs = new RecordSet();
String sql = "select * from kq_ShiftManagement where id = "+serialid+" and is_rest = 1";
rs.execute(sql);
Boolean check = false;
if (rs.getCounts()>0){
check = true;
}
return check;
}
/**
* ()
*
* @param groupId ID
* @param date
* @return 1-2-3--1-
*/
public static int getChangeType(String groupId, String date) {
int changeType = -1;//默认没有设置过节假日(节假日设置的类型1-公众假日、2-调配工作日、3-调配休息日)
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
String tmpChangetype = kqHolidaySetComInfo.getChangeType(groupId, date);
if(null != tmpChangetype){
changeType = Util.getIntValue(tmpChangetype, -1);
}
return changeType;
}
/**
*
* @param groupid
* @return
*/
private static String getpbCheckValue(String groupid){
RecordSet rs = new RecordSet();
String sql = "select pbcheck from kq_group where id = "+groupid;
rs.execute(sql);
String pbcheck = "";
if (rs.next()){
pbcheck = Util.null2String(rs.getString("pbcheck"));
}
return pbcheck;
}
public static void main(String[] args) {
String fromDate = TimeUtil.getMonthBeginDay("2025-04-07");
String toDate = TimeUtil.getMonthEndDay("2025-04-07");
List<String> lsDate = new ArrayList<>();
Calendar cal = DateUtil.getCalendar();
boolean isEnd = false;
for(String date=toDate; !isEnd;) {
if(date.equals(fromDate)) isEnd = true;
lsDate.add(date);
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), -1);
}
System.out.println(lsDate);
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public List<BizLogContext> getLogContexts() {
return logger.getBizLogContexts();
}
}

@ -1,510 +0,0 @@
package com.engine.kq.cmd.shiftschedule;
import com.alibaba.fastjson.JSON;
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.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.bean.KqShiftscheduleOperateLog;
import com.engine.kq.biz.*;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.BatchRecordSet;
import weaver.conn.DBUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.Reminder.KQAutoCardTask;
import weaver.hrm.User;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class SaveShiftScheduleCmd extends AbstractCommonCommand<Map<String, Object>> {
private SimpleBizLogger logger;
// 添加日志功能
private List<List<Object>> operateLogParams = new ArrayList<>();
// 操作类型 操作人 考勤组名称+id 被修改人 被修改班次日期 被修改班次+id 排班设置行id
private List<Object> operateLogParam = null;
public SaveShiftScheduleCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
this.logger = new SimpleBizLogger();
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
BatchRecordSet bRs = new BatchRecordSet();
String today = DateUtil.getCurrentDate();
String sql = "";
try{
//必要的权限判断
if(!HrmUserVarify.checkUserRight("HrmKQGroup:Add",user)) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage()));
return retmap;
}
String data = Util.null2String(params.get("data"));
JSONObject jsonObj = JSON.parseObject(data);
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQShiftManagementComInfo kqShiftScheduleComInfo = new KQShiftManagementComInfo();
ResourceComInfo rci = new ResourceComInfo();
String groupId = Util.null2String(jsonObj.get("groupId"));
JSONArray datas = jsonObj.getJSONArray("datas");
List<List<Object>> paramInsert = new ArrayList<List<Object>>();
List<List<Object>> paramUpdate = new ArrayList<List<Object>>();
List<Object> params = null;
String delIds = "";
List<List<Object>> lsFormatParams = new ArrayList<>();
List<Object> formatParams = null;
List<List<Object>> lsDeleteParams = new ArrayList<>();
List<Object> deleteParams = null;
List<List<Object>> lscheckSerialParams = new ArrayList<>();
List<Object> checkSerialParams = null;
JSONObject resourceDataObj = null;
JSONArray arrKqDataObj = null;
JSONObject kqDataObj = null;
KqShiftscheduleOperateLog bean = null;
//获取所属月份用日期
String ssyfDate = "";
List<String> lsGroupMembers = new ArrayList<>();
Map<String,Object> mapShiftScheduleOri = new HashMap<>();
for(int i=0;datas!=null&&i<datas.size();i++){
resourceDataObj = (JSONObject)datas.get(i);
String resourceid = Util.null2String(resourceDataObj.get("resourceid"));
lsGroupMembers.add(resourceid);
arrKqDataObj = resourceDataObj.getJSONArray("kqdata");
for(int j=0;arrKqDataObj!=null&&j<arrKqDataObj.size();j++) {
kqDataObj = (JSONObject) arrKqDataObj.get(j);
// 如果id为空则代表原先是空白单元格
String id = Util.null2String(kqDataObj.get("id"));
String date = Util.null2String(kqDataObj.get("date"));
if(!SaveShiftScheduleCmd.isDate(date)) {
continue;
}
// 原先排班的班次id
String oldSerialid = Util.null2String(kqDataObj.get("oldValue"));
// 新班次id 如果 serialid是-999 oldValue是班次id那么就是原先是有班次的后面把班次删除了
String serialid = Util.null2String(kqDataObj.get("serialid"));
if(serialid.equals("-999"))serialid="";
boolean needChange = false;
//if(weaver.common.DateUtil.timeInterval(date,today)>0)continue;//今天之前的无需处理
if(id.length()>0){ // 更新
ssyfDate = date;
if(serialid.length()==0 && oldSerialid.length() > 0){ //删除
if(delIds.length()>0) {
delIds+=",";
}
delIds+=id;
bean = new KqShiftscheduleOperateLog(2,user.getLastname(),kqGroupComInfo.getGroupname(groupId)+"(id:"+groupId+")",rci.getLastname(resourceid),
date, ("-1".equals(oldSerialid) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftScheduleComInfo.getSerial(oldSerialid)+"(id:"+oldSerialid+")"), id, "", user.getLanguage());
addLog(bean);
}else {
if(!oldSerialid.equals(serialid) && oldSerialid.length() > 0) {
needChange = true;
params = new ArrayList<Object>();
params.add(serialid);
params.add(id);
params.add(resourceid);
paramUpdate.add(params);
bean = new KqShiftscheduleOperateLog(1,user.getLastname(),kqGroupComInfo.getGroupname(groupId)+"(id:"+groupId+")",rci.getLastname(resourceid),
date, ("-1".equals(oldSerialid) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftScheduleComInfo.getSerial(oldSerialid)+"(id:"+oldSerialid+")"), id, ("-1".equals(serialid) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftScheduleComInfo.getSerial(serialid)+"(id:"+serialid+")"), user.getLanguage());
addLog(bean);
}
}
mapShiftScheduleOri.put(date+"|"+resourceid,serialid);
}else{ //新建
if(serialid.length()==0)continue;
if(!oldSerialid.equals(serialid)) {
ssyfDate = date;
needChange = true;
params = new ArrayList<Object>();
params.add(date);
params.add(serialid);
params.add(resourceid);
params.add(groupId);
paramInsert.add(params);
bean = new KqShiftscheduleOperateLog(0,user.getLastname(),kqGroupComInfo.getGroupname(groupId)+"(id:"+groupId+")",rci.getLastname(resourceid),
date, "", id, ("-1".equals(serialid) ? SystemEnv.getHtmlLabelName(26593, user.getLanguage()) : kqShiftScheduleComInfo.getSerial(serialid)+"(id:"+serialid+")"), user.getLanguage());
addLog(bean);
mapShiftScheduleOri.put(date+"|"+resourceid,serialid);
}
}
if(needChange) {
deleteParams = new ArrayList<>();
deleteParams.add(resourceid);
deleteParams.add(date);
lsDeleteParams.add(deleteParams);
checkSerialParams = new ArrayList<>();
checkSerialParams.add(resourceid);
checkSerialParams.add(date);
checkSerialParams.add(serialid);
lscheckSerialParams.add(checkSerialParams);
if(DateUtil.timeInterval(date,today)>=0) {
formatParams = new ArrayList<>();
formatParams.add(resourceid);
formatParams.add(date);
lsFormatParams.add(formatParams);
}
}
}
}
BaseBean bb = new BaseBean();
String fromDate = TimeUtil.getMonthBeginDay(ssyfDate);
String toDate = TimeUtil.getMonthEndDay(ssyfDate);
List<String> lsDateNew = new ArrayList<>();
Calendar calNew = DateUtil.getCalendar();
boolean isEndNew = false;
for(String date=fromDate; !isEndNew;) {
if(date.equals(toDate)) isEndNew = true;
lsDateNew.add(date);
calNew.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(calNew.getTime(), 1);
}
Map<String,Object> mapShiftScheduleAll = new HashMap<>();
Set<String> unSavePerson = new HashSet<>();
//上四休二校验,生成预排班数据结构
for(String resourceid:lsGroupMembers){
Map<String,Object> mapShiftScheduleChild = new HashMap<>();
String sqlChild = " select id, resourceid, kqdate,serialid from kq_shiftschedule where (isdelete is null or isdelete <> '1') and groupid=? ";
//有客户提下面的sql有性能问题在表数据较多并且该表数据改动较为频率不适合建索引所以对mapShiftSchedule先缓存的数据范围过滤下没必要全表缓存
sqlChild += " and kqdate>='"+fromDate+"' and kqdate<='"+toDate+"' ";
rs.executeQuery(sqlChild,groupId);
while(rs.next()){
mapShiftScheduleChild.put(rs.getString("kqdate")+"|"+rs.getString("resourceid"),rs.getString("serialid"));
}
//生成这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcidNew = Util.null2String(mapShiftScheduleOri.get(date+"|"+resourceid));
if(StringUtils.isNotBlank(bcidNew)){
//本次排班预生成班次id
mapShiftScheduleAll.put(date+"|"+resourceid,bcidNew);
}else{
//本次排班未预生成id检查历史生成的班次id若历史也没有生效班次且当天不是节假日则不让保存
String bcidOld = Util.null2String(mapShiftScheduleChild.get(date+"|"+resourceid));
if(StringUtils.isNotBlank(bcidOld)){
mapShiftScheduleAll.put(date+"|"+resourceid,bcidOld);
}else{
int changeType = getChangeType(groupId, date);
if(changeType != 1){
//该人员不让保存
unSavePerson.add(resourceid);
}
}
}
}
}
bb.writeLog("unSavePerson"+JSONObject.toJSONString(unSavePerson));
bb.writeLog("mapShiftScheduleAll"+JSONObject.toJSONString(mapShiftScheduleAll));
// 校验是否满足上四休二规则从当月第一个连续两天的休息班作为锚点判断此休息班前后排班是否满足固定4天工作+2天休息的模式
// 如果当月存在法定节假日则默认跳过后继续排班。例如:周三为节假日,且当周一为第一天工作日,那么当周的排班结果为:周一~周二:
// 2天工作日、周三跳过、周四~周五2天工作日、周六周日2天休息班
for(String resourceid:lsGroupMembers){
bb.writeLog("resourceid"+resourceid);
//遍历这个人员这个月的预生成排班
for(int i=0;i<lsDateNew.size();i++) {
String date = lsDateNew.get(i);
String bcid = Util.null2String(mapShiftScheduleAll.get(date+"|"+resourceid));
bb.writeLog("date"+date+"bcid"+bcid);
if(StringUtils.isNotBlank(bcid)){
//班次是否是休息班,是的话往后判断是否是两个连续休息班
boolean checkXxb = checkXxr(bcid);
if(checkXxb){
//是休息班,往后找
bb.writeLog("是休息班,往后找");
boolean findNextXxb = true;
Integer day = 1;
while (findNextXxb){
calNew.setTime(DateUtil.parseToDate(date));
String dateNext = DateUtil.getDate(calNew.getTime(), day);
day++;
String bcidNext = Util.null2String(mapShiftScheduleAll.get(dateNext+"|"+resourceid));
bb.writeLog("dateNext"+dateNext+"day"+day+"bcidNext"+bcidNext);
if(StringUtils.isNotBlank(bcidNext)){
//找到了第一个有班次的
bb.writeLog("找到了第一个有班次的");
findNextXxb = false;
boolean checkXxbNext = checkXxr(bcidNext);
if(checkXxbNext){
//再往后找一个班次,该班次需要为工作日
//是休息班,往后找
bb.writeLog("也是休息班,再往后找");
boolean findNextXxb1 = true;
Integer day1 = 1;
while (findNextXxb1){
calNew.setTime(DateUtil.parseToDate(dateNext));
String dateNext1 = DateUtil.getDate(calNew.getTime(), day1);
day1++;
String bcidNext1 = Util.null2String(mapShiftScheduleAll.get(dateNext1+"|"+resourceid));
bb.writeLog("bcidNext1"+bcidNext1+"dateNext1"+dateNext1+"day1"+day1);
if(StringUtils.isNotBlank(bcidNext1)){
//不往后找了
boolean checkXxbNext1 = checkXxr(bcidNext1);
findNextXxb1 = false;
bb.writeLog("checkXxbNext1"+checkXxbNext1);
if(checkXxbNext1){
//存在三个连续的休息班,不符合上四休二
bb.writeLog("存在三个连续的休息班,不符合上四休二");
unSavePerson.add(resourceid);
}else{
i++;
}
}else{
i++;
}
//到最后一天也没找到,暂不处理
if(DateUtil.timeInterval(toDate,dateNext1)>=0){
findNextXxb1 = false;
}
}
//将date作为一个锚点往前找并判断是否满足上四休二
boolean findBefore = true;
Integer dayB = -1;
//工作班数量
Integer gzbnum = 0;
//判断前面是否还有休息班标识
Integer xxbNo = 0;
while (findBefore){
calNew.setTime(DateUtil.parseToDate(date));
String dateBefore = DateUtil.getDate(calNew.getTime(), dayB);
dayB--;
String bcidBefore = Util.null2String(mapShiftScheduleAll.get(dateBefore+"|"+resourceid));
bb.writeLog("bcidBefore"+bcidBefore+"dateBefore"+dateBefore+"dayB"+dayB);
if(StringUtils.isNotBlank(bcidBefore)){
boolean checkXxbBefore = checkXxr(bcidBefore);
if(checkXxbBefore){
//找到了第一个休息班,判断间隔了多少个非休息班,不再找了
bb.writeLog("找到了第一个休息班,判断间隔了多少个非休息班,不再找了");
findBefore = false;
xxbNo = 1;
}else{
gzbnum ++;
}
}
//找到月初一号了,不找了
if(DateUtil.timeInterval(dateBefore,fromDate)>=0){
findBefore = false;
}
}
bb.writeLog("gzbnum"+gzbnum);
if(xxbNo == 1){
//当前锚点前面有休息班若间隔工作班数量不为4则不符合
if(gzbnum != 4){
bb.writeLog("当前锚点前面有休息班若间隔工作班数量不为4则不符合");
unSavePerson.add(resourceid);
}
}else{
//当前锚点是第一个休息班
if(gzbnum>4){
//锚点往前有超过四个工作班,不符合
bb.writeLog("当前锚点是第一个休息班,锚点往前有超过四个工作班,不符合");
unSavePerson.add(resourceid);
}
}
}else{
//找到的不是休息班,也认为不符合上四休二
bb.writeLog("找到的不是休息班,也认为不符合上四休二");
unSavePerson.add(resourceid);
}
}else{
i++;
}
//到最后一天也没找到,暂不处理
if(DateUtil.timeInterval(toDate,dateNext)>=0){
findNextXxb = false;
}
}
}
}
}
}
bb.writeLog("unSavePerson"+JSONObject.toJSONString(unSavePerson));
sql = " update kq_shiftschedule set serialid=?,isDelete=0 where id = ? ";
for (int i = 0; paramUpdate != null && i < paramUpdate.size(); i++) {
List<Object> update_params = paramUpdate.get(i);
String serialid = Util.null2String(update_params.get(0));
String id = Util.null2String(update_params.get(1));
String resourceid = Util.null2String(update_params.get(2));
if(unSavePerson.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, serialid,id);
}
}
sql = "insert into kq_shiftschedule (kqdate,serialid,resourceid,groupid,isDelete) values(?,?,?,?,0)";
for (int i = 0; paramInsert != null && i < paramInsert.size(); i++) {
List<Object> insert_params = paramInsert.get(i);
String kqdate = Util.null2String(insert_params.get(0));
String serialid = Util.null2String(insert_params.get(1));
String resourceid = Util.null2String(insert_params.get(2));
String groupid = Util.null2String(insert_params.get(3));
if(unSavePerson.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, kqdate,serialid,resourceid,groupid);
}
}
if(delIds.length()>0){
List sqlParams = new ArrayList();
Object[] objects= DBUtil.transListIn(delIds,sqlParams);
sql = "update kq_shiftschedule set isdelete =1 where id in("+objects[0]+") ";
rs.executeUpdate(sql, sqlParams);
}
//删除之前的排的班次,一天只能有一个班次
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? and groupid != "+groupId;
for (int i = 0; lsDeleteParams != null && i < lsDeleteParams.size(); i++) {
List<Object> delete_params = lsDeleteParams.get(i);
String resourceid = Util.null2String(delete_params.get(0));
String kqdate = Util.null2String(delete_params.get(1));
if(unSavePerson.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate);
}
}
sql = " update kq_shiftschedule set isdelete =1 where (isdelete is null or isdelete <> '1') and resourceid = ? and kqdate = ? and serialid != ? ";
for (int i = 0; lscheckSerialParams != null && i < lscheckSerialParams.size(); i++) {
List<Object> check_params = lscheckSerialParams.get(i);
String resourceid = Util.null2String(check_params.get(0));
String kqdate = Util.null2String(check_params.get(1));
String serialid = Util.null2String(check_params.get(2));
if(unSavePerson.contains(resourceid)){
//该人员不符合规则,不生效
}else{
rs.executeUpdate(sql, resourceid,kqdate,serialid);
}
}
sql = "insert into kq_shiftscheduleoperate_log(operatetype,operator,kqgroupname,changeduser,changedshiftdate,changedshiftname,kqshiftid) values(?,?,?,?,?,?,?)";
bRs.executeBatchSqlNew(sql, operateLogParams);
new KQShiftScheduleComInfo().removeCache();
//刷新报表数据
new KQFormatBiz().format(lsFormatParams,16);
KQGroupComInfo kQGroupComInfo = new KQGroupComInfo();
String auto_checkout = kQGroupComInfo.getAuto_checkout(groupId);
String auto_checkin = kQGroupComInfo.getAuto_checkin(groupId);
if("1".equalsIgnoreCase(auto_checkin) || "1".equalsIgnoreCase(auto_checkout)){
//如果开启了自动打卡,保存考勤组成员之后需要格式化下缓存
KQAutoCardTask kqAutoCardTask = new KQAutoCardTask();
kqAutoCardTask.initAutoCardTask(groupId);
}
if(unSavePerson.size()>0){
ResourceComInfo resourceComInfo = new ResourceComInfo();
List<String> personNameList = new ArrayList<>();
for(String personid:unSavePerson){
personNameList.add(resourceComInfo.getLastname(personid));
}
retmap.put("status", "-1");
retmap.put("message", "【"+StringUtils.join(personNameList,",")+"】上述员工当前月份排班不符合做四休二规则或存在班次为空的日期");
return retmap;
}
retmap.put("status", "1");
retmap.put("message", SystemEnv.getHtmlLabelName(18758, user.getLanguage()));
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
private void addLog(KqShiftscheduleOperateLog bean) {
operateLogParam = new ArrayList<>();
operateLogParam.add(bean.getOperatetype());
operateLogParam.add(bean.getOperator());
operateLogParam.add(bean.getKqgroupname());
operateLogParam.add(bean.getChangeduser());
operateLogParam.add(bean.getChangedshiftdate());
operateLogParam.add(bean.getChangedshiftname());
operateLogParam.add(bean.getKqshiftid());
operateLogParams.add(operateLogParam);
}
public static boolean isDate(String str) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false); // 严格匹配
try {
sdf.parse(str);
return true;
} catch (ParseException e) {
return false;
}
}
/**
* ()
*
* @param groupId ID
* @param date
* @return 1-2-3--1-
*/
public static int getChangeType(String groupId, String date) {
int changeType = -1;//默认没有设置过节假日(节假日设置的类型1-公众假日、2-调配工作日、3-调配休息日)
KQHolidaySetComInfo kqHolidaySetComInfo = new KQHolidaySetComInfo();
String tmpChangetype = kqHolidaySetComInfo.getChangeType(groupId, date);
if(null != tmpChangetype){
changeType = Util.getIntValue(tmpChangetype, -1);
}
return changeType;
}
/**
*
* @param serialid
* @return
*/
private static Boolean checkXxr(String serialid){
RecordSet rs = new RecordSet();
String sql = "select * from kq_ShiftManagement where id = "+serialid+" and is_rest = 1";
rs.execute(sql);
Boolean check = false;
if (rs.getCounts()>0){
check = true;
}
return check;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public List<BizLogContext> getLogContexts() {
return logger.getBizLogContexts();
}
}

@ -1,692 +0,0 @@
package com.engine.kq.util;
import com.engine.kq.bean.KQRepeatBean;
import com.engine.kq.biz.KQLeaveRulesBiz;
import com.engine.kq.biz.KQLeaveRulesComInfo;
import com.engine.kq.biz.KQRepeatLengthContext;
import com.engine.kq.biz.KQWorkTime;
import com.engine.kq.biz.chain.cominfo.ShiftInfoCominfoBean;
import com.engine.kq.biz.chain.duration.NonDayUnitSplitChain;
import com.engine.kq.biz.chain.duration.NonHalfUnitSplitChain;
import com.engine.kq.biz.chain.duration.NonHourUnitSplitChain;
import com.engine.kq.biz.chain.duration.NonWholeUnitSplitChain;
import com.engine.kq.biz.chain.duration.NonWorkDurationChain;
import com.engine.kq.biz.chain.duration.WorkDayUnitSplitChain;
import com.engine.kq.biz.chain.duration.WorkDurationChain;
import com.engine.kq.biz.chain.duration.WorkHalfUnitSplitChain;
import com.engine.kq.biz.chain.duration.WorkHourUnitSplitChain;
import com.engine.kq.biz.chain.duration.WorkWholeUnitSplitChain;
import com.engine.kq.biz.chain.shiftinfo.ShiftInfoBean;
import com.engine.kq.enums.DurationTypeEnum;
import com.engine.kq.log.KQLog;
import com.engine.kq.wfset.bean.SplitBean;
import com.engine.kq.wfset.util.KQFlowUtil;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.report.schedulediff.HrmScheduleDiffUtil;
import weaver.hrm.resource.SptmForLeave;
public class KQDurationCalculatorUtil extends BaseBean {
private KQLog kqLog = new KQLog();
private final String resourceid;
private String fromDate;
private String toDate;
private String fromTime;
private String toTime;
private String newLeaveType;
/**
*
* 1-
* 2-
* 3-
* 4-
*/
private String durationrule;
/**
* 1-
* 2-
*/
private String computingMode;
/**
*
*/
private String overtime_type;
private DurationTypeEnum durationTypeEnum;
//外部类的构造函数
private KQDurationCalculatorUtil(DurationParamBuilder build){
this.resourceid = build.resourceid;
this.fromDate = build.fromDate;
this.toDate = build.toDate;
this.fromTime = build.fromTime;
this.toTime = build.toTime;
this.newLeaveType = build.newLeaveType;
this.durationrule = build.durationrule;
this.computingMode = build.computingMode;
this.durationTypeEnum = build.durationTypeEnum;
this.overtime_type = build.overtime_type;
}
/**
*
* @param resourceid
* @param date
* @param containYesterday
* @return
*/
public static ShiftInfoBean getWorkTime(String resourceid, String date,boolean containYesterday){
User user = User.getUser(Util.getIntValue(resourceid), 0);
if(user == null){
return null;
}
return getWorkTime(user, date,containYesterday);
}
/**
*
* @param resourceid
* @param date
* @param containYesterday
* @param isLog
* @return
*/
public static ShiftInfoBean getWorkTime(String resourceid, String date,boolean containYesterday,boolean isLog){
User user = User.getUser(Util.getIntValue(resourceid), 0);
if(user == null){
return null;
}
return getWorkTime(user, date,containYesterday,isLog);
}
public static ShiftInfoCominfoBean getShiftInfoCominfoBean(String resourceid, String date){
KQWorkTime kqWorkTime = new KQWorkTime();
Map<String, Object> kqWorkTimeMap = new HashMap<>();
ShiftInfoCominfoBean shiftInfoCominfoBean = kqWorkTime.getShiftInfoCominfoBean(resourceid, date);
return shiftInfoCominfoBean;
}
/**
* user
* @param user
* @param date
* @param containYesterday
* @param isLog
* @return
*/
public static ShiftInfoBean getWorkTime(User user, String date,boolean containYesterday,boolean isLog){
KQWorkTime kqWorkTime = new KQWorkTime();
Map<String, Object> kqWorkTimeMap = new HashMap<>();
kqWorkTimeMap = kqWorkTime.getWorkDuration(""+user.getUID(), date,containYesterday,isLog);
boolean isfree = "1".equalsIgnoreCase(Util.null2String(kqWorkTimeMap.get("isfree")));
if(isfree){
ShiftInfoBean shiftInfoBean = new ShiftInfoBean();
shiftInfoBean.setIsfree(true);
String signStart = Util.null2String(kqWorkTimeMap.get("signStart"));
String workMins = Util.null2String(kqWorkTimeMap.get("workMins"));
shiftInfoBean.setFreeSignStart(signStart);
shiftInfoBean.setFreeWorkMins(workMins);
shiftInfoBean.setSplitDate(date);
if(signStart.length() > 0 && workMins.length() > 0){
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime signLocalTime = LocalTime.parse(signStart, dateTimeFormatter);
shiftInfoBean.setFreeSignEnd(signLocalTime.plusMinutes(Util.getIntValue(workMins)).format(dateTimeFormatter));
shiftInfoBean.setFreeSignMiddle(signLocalTime.plusMinutes(Util.getIntValue(workMins)/2).format(dateTimeFormatter));
}
return shiftInfoBean;
}else{
if(kqWorkTimeMap.get("shiftInfoBean") != null){
ShiftInfoBean shiftInfoBean = (ShiftInfoBean)kqWorkTimeMap.get("shiftInfoBean");
return shiftInfoBean;
}else{
return null;
}
}
}
/**
* user
* @param user
* @param date
* @param containYesterday
* @return
*/
public static ShiftInfoBean getWorkTime(User user, String date,boolean containYesterday){
return getWorkTime(user, date, containYesterday, true);
}
public static Map<String, Object> getWorkButton(String resourceid, String date, boolean containYesterday){
User user = User.getUser(Util.getIntValue(resourceid), 0);
return getWorkButton(user,date,containYesterday);
}
public static Map<String, Object> getWorkButton(User user, String date, boolean containYesterday){
KQWorkTime kqWorkTime = new KQWorkTime();
Map<String, Object> kqWorkTimeMap = new HashMap<>();
kqWorkTimeMap = kqWorkTime.getWorkButton(""+user.getUID(), date,containYesterday);
return kqWorkTimeMap;
}
/**
*
* @return
*/
public Map<String,Object> getNonWorkDuration(){
Map<String,Object> durationMap = new HashMap<>();
try{
double D_Duration = 0.0;
double Min_Duration = 0.0;
//公众假日加班时长
double D_Pub_Duration = 0.0;
double D_Pub_Mins = 0.0;
//工作日加班时长
double D_Work_Duration = 0.0;
double D_Work_Mins = 0.0;
//休息日加班时长
double D_Rest_Duration = 0.0;
double D_Rest_Mins = 0.0;
SplitBean splitBean = new SplitBean();
splitBean.setFromDate(fromDate);
splitBean.setFromTime(fromTime);
splitBean.setToDate(toDate);
splitBean.setToTime(toTime);
splitBean.setResourceId(resourceid);
splitBean.setFromdatedb(fromDate);
splitBean.setTodatedb(toDate);
splitBean.setFromtimedb(fromTime);
splitBean.setTotimedb(toTime);
splitBean.setDurationrule(durationrule);
splitBean.setComputingMode(computingMode);
splitBean.setDurationTypeEnum(DurationTypeEnum.OVERTIME);
splitBean.setOvertime_type(overtime_type);
List<SplitBean> splitBeans = new ArrayList<>();
NonWorkDurationChain hourUnitSplitChain = new NonHourUnitSplitChain(splitBeans);
NonWorkDurationChain dayUnitSplitChain = new NonDayUnitSplitChain(splitBeans);
NonWorkDurationChain halfUnitSplitChain = new NonHalfUnitSplitChain(splitBeans);
NonWorkDurationChain wholeUnitSplitChain = new NonWholeUnitSplitChain(splitBeans);
//设置执行链
hourUnitSplitChain.setDurationChain(dayUnitSplitChain);
dayUnitSplitChain.setDurationChain(halfUnitSplitChain);
halfUnitSplitChain.setDurationChain(wholeUnitSplitChain);
//把初始数据设置进去
hourUnitSplitChain.handleDuration(splitBean);
//每一天的流程时长都在这里了,搞吧
for(SplitBean sb : splitBeans){
// * 1-公众假日、2-工作日、3-休息日
int changeType = sb.getChangeType();
double durations = Util.getDoubleValue(sb.getDuration(), 0.0);
double durationMins = sb.getD_Mins();
if(1 == changeType){
D_Pub_Duration += durations;
D_Pub_Mins += durationMins;
}
if(2 == changeType){
D_Work_Duration += durations;
D_Work_Mins += durationMins;
}
if(3 == changeType){
D_Rest_Duration += durations;
D_Rest_Mins += durationMins;
}
}
Min_Duration = D_Pub_Mins+D_Work_Mins+D_Rest_Mins;
if("3".equalsIgnoreCase(durationrule) || "5".equalsIgnoreCase(durationrule) || "6".equalsIgnoreCase(durationrule)){
double d_hour = Min_Duration/60.0;
durationMap.put("duration", KQDurationCalculatorUtil.getDurationRound(""+d_hour));
}else {
double oneDayHour = KQFlowUtil.getOneDayHour(DurationTypeEnum.OVERTIME,"");
double d_day = Min_Duration/(oneDayHour * 60);
durationMap.put("duration", KQDurationCalculatorUtil.getDurationRound(""+d_day));
}
durationMap.put("min_duration", KQDurationCalculatorUtil.getDurationRound(""+Min_Duration));
}catch (Exception e){
e.printStackTrace();
}
return durationMap;
}
/**
*
* @return
*/
public Map<String,Object> getWorkDuration(){
Map<String,Object> durationMap = new HashMap<>();
try{
if(!isValidate(fromDate,toDate,fromTime,toTime)){
durationMap.put("duration", "0.0");
return durationMap;
}
if(durationTypeEnum != DurationTypeEnum.COMMON_CAL){
kqLog.info("getWorkDuration:"+durationTypeEnum.getDurationType()+":fromDate:"+fromDate+":toDate:"+toDate+":fromTime:"+fromTime+":toTime:"+toTime+":durationrule:"+durationrule+":computingMode:"+computingMode);
}
//如果是加班
if(durationTypeEnum ==DurationTypeEnum.OVERTIME){
return getNonWorkDuration();
}
//时长
double D_Duration = 0.0;
//分钟数
double Min_Duration = 0.0;
SplitBean splitBean = new SplitBean();
splitBean.setFromDate(fromDate);
splitBean.setFromTime(fromTime);
splitBean.setToDate(toDate);
splitBean.setToTime(toTime);
splitBean.setResourceId(resourceid);
splitBean.setFromdatedb(fromDate);
splitBean.setTodatedb(toDate);
splitBean.setFromtimedb(fromTime);
splitBean.setTotimedb(toTime);
splitBean.setDurationrule(durationrule);
splitBean.setDurationTypeEnum(durationTypeEnum);
splitBean.setComputingMode(computingMode);
splitBean.setNewLeaveType(newLeaveType);
if("2".equalsIgnoreCase(computingMode)){
double oneDayHour = KQFlowUtil.getOneDayHour(durationTypeEnum,newLeaveType);
splitBean.setOneDayHour(oneDayHour);
if(durationTypeEnum == DurationTypeEnum.LEAVE){
//只有自然日 请假才有这个排除节假日、休息日的功能
splitBean.setFilterholidays(KQLeaveRulesBiz.getFilterHolidays(splitBean.getNewLeaveType()));
}
}
if(durationTypeEnum ==DurationTypeEnum.LEAVE || durationTypeEnum ==DurationTypeEnum.LEAVEBACK){
if(newLeaveType.length() > 0){
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
String conversion = kqLeaveRulesComInfo.getConversion(newLeaveType);
String repeatTime = kqLeaveRulesComInfo.getRepeatTime(newLeaveType);
splitBean.setConversion(conversion);
splitBean.setRepeatTime(repeatTime);
}
}
List<SplitBean> splitBeans = new ArrayList<>();
WorkDurationChain hourUnitSplitChain = new WorkHourUnitSplitChain(splitBeans);
WorkDurationChain dayUnitSplitChain = new WorkDayUnitSplitChain(splitBeans);
WorkDurationChain halfUnitSplitChain = new WorkHalfUnitSplitChain(splitBeans);
WorkDurationChain wholeUnitSplitChain = new WorkWholeUnitSplitChain(splitBeans);
//设置执行链
hourUnitSplitChain.setDurationChain(dayUnitSplitChain);
dayUnitSplitChain.setDurationChain(halfUnitSplitChain);
halfUnitSplitChain.setDurationChain(wholeUnitSplitChain);
//把初始数据设置进去
hourUnitSplitChain.handleDuration(splitBean);
//每一天的流程时长都在这里了,搞吧
for(SplitBean sb : splitBeans){
double durations = Util.getDoubleValue(sb.getDuration(), 0.0);
double min_durations = sb.getD_Mins();
D_Duration += durations;
Min_Duration += min_durations;
}
durationMap.put("duration", KQDurationCalculatorUtil.getDurationRound(""+D_Duration));
durationMap.put("min_duration", KQDurationCalculatorUtil.getDurationRound(""+Min_Duration));
}catch (Exception e){
e.printStackTrace();
}
return durationMap;
}
/**
*
* @return
*/
public List<SplitBean> getWorkDurationCustom(){
List<SplitBean> splitBeans = new ArrayList<>();
try{
if(!isValidate(fromDate,toDate,fromTime,toTime)){
return splitBeans;
}
if(durationTypeEnum != DurationTypeEnum.COMMON_CAL){
kqLog.info("getWorkDuration:"+durationTypeEnum.getDurationType()+":fromDate:"+fromDate+":toDate:"+toDate+":fromTime:"+fromTime+":toTime:"+toTime+":durationrule:"+durationrule+":computingMode:"+computingMode);
}
//如果是加班
if(durationTypeEnum ==DurationTypeEnum.OVERTIME){
return splitBeans;
}
//时长
double D_Duration = 0.0;
//分钟数
double Min_Duration = 0.0;
SplitBean splitBean = new SplitBean();
splitBean.setFromDate(fromDate);
splitBean.setFromTime(fromTime);
splitBean.setToDate(toDate);
splitBean.setToTime(toTime);
splitBean.setResourceId(resourceid);
splitBean.setFromdatedb(fromDate);
splitBean.setTodatedb(toDate);
splitBean.setFromtimedb(fromTime);
splitBean.setTotimedb(toTime);
splitBean.setDurationrule(durationrule);
splitBean.setDurationTypeEnum(durationTypeEnum);
splitBean.setComputingMode(computingMode);
splitBean.setNewLeaveType(newLeaveType);
if("2".equalsIgnoreCase(computingMode)){
double oneDayHour = KQFlowUtil.getOneDayHour(durationTypeEnum,newLeaveType);
splitBean.setOneDayHour(oneDayHour);
if(durationTypeEnum == DurationTypeEnum.LEAVE){
//只有自然日 请假才有这个排除节假日、休息日的功能
splitBean.setFilterholidays(KQLeaveRulesBiz.getFilterHolidays(splitBean.getNewLeaveType()));
}
}
if(durationTypeEnum ==DurationTypeEnum.LEAVE || durationTypeEnum ==DurationTypeEnum.LEAVEBACK){
if(newLeaveType.length() > 0){
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
String conversion = kqLeaveRulesComInfo.getConversion(newLeaveType);
String repeatTime = kqLeaveRulesComInfo.getRepeatTime(newLeaveType);
splitBean.setConversion(conversion);
splitBean.setRepeatTime(repeatTime);
}
}
WorkDurationChain hourUnitSplitChain = new WorkHourUnitSplitChain(splitBeans);
WorkDurationChain dayUnitSplitChain = new WorkDayUnitSplitChain(splitBeans);
WorkDurationChain halfUnitSplitChain = new WorkHalfUnitSplitChain(splitBeans);
WorkDurationChain wholeUnitSplitChain = new WorkWholeUnitSplitChain(splitBeans);
//设置执行链
hourUnitSplitChain.setDurationChain(dayUnitSplitChain);
dayUnitSplitChain.setDurationChain(halfUnitSplitChain);
halfUnitSplitChain.setDurationChain(wholeUnitSplitChain);
//把初始数据设置进去
hourUnitSplitChain.handleDuration(splitBean);
}catch (Exception e){
e.printStackTrace();
}
return splitBeans;
}
/**
*
* @return false
*/
private boolean isValidate(String fromDate,String toDate,String fromTime,String toTime) {
KQRepeatBean kqRepeatBean = KQRepeatLengthContext.getRepeatBean();
if(kqRepeatBean != null){
return true;
}
if(fromDate.length() == 0 || toDate.length() == 0){
return false;
}
if(fromTime.length() == 0 || toTime.length() == 0){
return false;
}
DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String fromDateTime = fromDate+" "+fromTime+":00";
String toDateTime = toDate+" "+toTime+":00";
LocalDateTime localFromDateTime = LocalDateTime.parse(fromDateTime,fullFormatter);
LocalDateTime localToDateTime = LocalDateTime.parse(toDateTime,fullFormatter);
if(localFromDateTime.isAfter(localToDateTime) || localFromDateTime.isEqual(localToDateTime)){
return false;
}
return true;
}
/**
*
* @param fromDate
* @param fromTime
* @param toDate
* @param toTime
* @param resourceid
* @return
*/
public Map<String,Object> getTotalWorkingDurations(String fromDate,String fromTime,String toDate,String toTime,String resourceid){
KQDurationCalculatorUtil kqDurationCalculatorUtil =new DurationParamBuilder(resourceid).
fromDateParam(fromDate).toDateParam(toDate).fromTimeParam(fromTime).toTimeParam(toTime).durationRuleParam("1")
.computingModeParam("1").durationTypeEnumParam(DurationTypeEnum.COMMON_CAL).build();
Map<String,Object> durationMap = kqDurationCalculatorUtil.getWorkDuration();
return durationMap;
}
/**
*
* @param fromDate
* @param fromTime
* @param toDate
* @param toTime
* @param resourceid
* @return
*/
public String getTotalWorkingDays(String fromDate,String fromTime,String toDate,String toTime,String resourceid){
Map<String,Object> durationMap = getTotalWorkingDurations(fromDate,fromTime,toDate,toTime,resourceid);
String duration4day = Util.null2s(Util.null2String(durationMap.get("duration")),"0");
return KQDurationCalculatorUtil.getDurationRound(duration4day);
}
/**
*
* @param fromDate
* @param fromTime
* @param toDate
* @param toTime
* @param resourceid
* @return
*/
public String getTotalWorkingHours(String fromDate,String fromTime,String toDate,String toTime,String resourceid){
Map<String,Object> durationMap = getTotalWorkingDurations(fromDate,fromTime,toDate,toTime,resourceid);
String duration4min = Util.null2s(Util.null2String(durationMap.get("min_duration")),"0");
double duration4hour = Util.getDoubleValue(duration4min)/60.0;
return KQDurationCalculatorUtil.getDurationRound(duration4hour+"");
}
/**
*
* @param fromDate
* @param fromTime
* @param toDate
* @param toTime
* @param resourceid
* @return
*/
public String getTotalWorkingMins(String fromDate,String fromTime,String toDate,String toTime,String resourceid){
Map<String,Object> durationMap = getTotalWorkingDurations(fromDate,fromTime,toDate,toTime,resourceid);
String duration4min = Util.null2s(Util.null2String(durationMap.get("min_duration")),"0");
return KQDurationCalculatorUtil.getDurationRound(duration4min+"");
}
/**
*
* @param fromDate
* @param fromTime
* @param toDate
* @param toTime
* @param resourceid
* @return
*/
public String getTotalNonWorkingDays(String fromDate,String fromTime,String toDate,String toTime,String resourceid){
KQDurationCalculatorUtil kqDurationCalculatorUtil =new DurationParamBuilder(resourceid).
fromDateParam(fromDate).toDateParam(toDate).fromTimeParam(fromTime).toTimeParam(toTime).computingModeParam("1").
durationRuleParam("1").durationTypeEnumParam(DurationTypeEnum.OVERTIME).build();
Map<String,Object> durationMap = kqDurationCalculatorUtil.getNonWorkDuration();
String duration = Util.null2String(durationMap.get("duration"));
return KQDurationCalculatorUtil.getDurationRound(duration);
}
/**
*
* @param fromDate
* @param fromTime
* @param toDate
* @param toTime
* @param resourceid
* @return
*/
public String getTotalNonWorkingHours(String fromDate,String fromTime,String toDate,String toTime,String resourceid){
KQDurationCalculatorUtil kqDurationCalculatorUtil =new DurationParamBuilder(resourceid).
fromDateParam(fromDate).toDateParam(toDate).fromTimeParam(fromTime).toTimeParam(toTime).computingModeParam("1").
durationRuleParam("3").durationTypeEnumParam(DurationTypeEnum.OVERTIME).build();
Map<String,Object> durationMap = kqDurationCalculatorUtil.getNonWorkDuration();
String duration = Util.null2String(durationMap.get("duration"));
return KQDurationCalculatorUtil.getDurationRound(duration);
}
/**
* 2
* @param duration
* @return
*/
public static String getDurationRound(String duration){
if(HrmScheduleDiffUtil.isFromFlow()){
return Util.round(duration,5) ;
}
return Util.round(duration, 2);
}
/**
* 5
* @param duration
* @return
*/
public static String getDurationRound5(String duration){
return Util.round(duration, 5);
}
/**
* Builder
*/
public static class DurationParamBuilder {
//必选变量 人员看怎么都是需要的
private final String resourceid;
//可选变量
private String fromDate = "";
private String toDate = "";
private String fromTime = "";
private String toTime = "";
/**
*
*/
private String newLeaveType = "";
/**
*
* 1-
* 2-
* 3-
* 4-
*/
private String durationrule = "";
/**
*
* 1-
* 2-
*/
private String computingMode = "";
/**
*
*/
private String overtime_type = "";
/**
*
*/
private DurationTypeEnum durationTypeEnum;
public DurationParamBuilder(String resourceid) {
this.resourceid = resourceid;
//初始化的时候需要把其他参数先清空下
this.fromDate = "";
this.toDate = "";
this.fromTime = "";
this.toTime = "";
this.newLeaveType = "";
this.durationrule = "";
this.computingMode = "";
this.overtime_type = "";
}
//成员方法返回其自身,所以可以链式调用
public DurationParamBuilder fromDateParam(final String fromDate) {
this.fromDate = fromDate;
return this;
}
public DurationParamBuilder toDateParam(final String toDate) {
this.toDate = toDate;
return this;
}
public DurationParamBuilder fromTimeParam(final String fromTime) {
this.fromTime = fromTime;
return this;
}
public DurationParamBuilder toTimeParam(final String toTime) {
this.toTime = toTime;
return this;
}
public DurationParamBuilder newLeaveTypeParam(final String newLeaveType) {
this.newLeaveType = newLeaveType;
return this;
}
public DurationParamBuilder durationRuleParam(final String durationrule) {
this.durationrule = durationrule;
return this;
}
public DurationParamBuilder computingModeParam(final String computingMode) {
this.computingMode = computingMode;
return this;
}
public DurationParamBuilder overtime_typeParam(final String overtime_type) {
this.overtime_type = overtime_type;
return this;
}
public DurationParamBuilder durationTypeEnumParam(final DurationTypeEnum durationTypeEnum) {
this.durationTypeEnum = durationTypeEnum;
return this;
}
//Builder的build方法返回外部类的实例
public KQDurationCalculatorUtil build() {
return new KQDurationCalculatorUtil(this);
}
}
}

File diff suppressed because it is too large Load Diff

@ -1,33 +0,0 @@
package com.engine.xmgsecond.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2025/3/25 14:50
* @Description:
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeptCodeRule {
private Integer id;
private Integer subcompany;
private String code;
private String firstNum;
private String secondNum;
private String threeNum;
private String remark;
}

@ -1,32 +0,0 @@
package com.engine.xmgsecond.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2025/5/21 15:43
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class KqCloseRecords {
private Integer id;
private String subCompanyIds;
private String departmentIds;
private String startDate;
private String endDate;
private Integer closeStatus;
}

@ -1,37 +0,0 @@
package com.engine.xmgsecond.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2025/5/21 14:37
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class KqCloseSet {
private Integer id;
private Integer workflowId;
private String startDateCode;
private String endDateCode;
private String fbCode;
private String bmCode;
private Integer createNodeId;
private Integer endNodeId;
}

@ -1,67 +0,0 @@
package com.engine.xmgsecond.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2025/5/14 16:11
* @Description:
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class KqFormatTotal {
private Integer resourceId;
private Integer absenteeism;
/**
*
*/
private Integer forgotCheck;
/**
*
*/
private Integer forgotbeginworkcheck;
private Integer beLateMins;
private Integer gravebeLateMins;
private Integer leaveEearly;
private Integer graveLeaveEarly;
/**
*
*/
private boolean isAbsence;
/**
*
*/
private double absenceDays;
@Override
public String toString() {
return "KqFormatTotal{" +
"resourceId=" + resourceId +
", absenteeism=" + absenteeism +
", forgotCheck=" + forgotCheck +
", beLateMins=" + beLateMins +
", gravebeLateMins=" + gravebeLateMins +
", leaveEearly=" + leaveEearly +
", graveLeaveEarly=" + graveLeaveEarly +
", isAbsence=" + isAbsence +
", absenceDays=" + absenceDays +
'}';
}
}

@ -1,22 +0,0 @@
package com.engine.xmgsecond.service;
import com.engine.workflow.entity.publicApi.PAResponseEntity;
import com.engine.xmgsecond.entity.KqCloseSet;
import java.util.List;
import java.util.Map;
/**
* @Author liang.cheng
* @Date 2025/5/16 15:17
* @Description: TODO
* @Version 1.0
*/
public interface KqCloseAccountService {
List<PAResponseEntity> closeAccount(Map<String, Object> param);
List<KqCloseSet> getWorkflowList();
Boolean checkSubmit(Map<String, Object> param);
}

@ -1,196 +0,0 @@
package com.engine.xmgsecond.service.impl;
import cn.hutool.core.collection.CollectionUtil;
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.entity.KqCloseSet;
import com.engine.xmgsecond.service.KqCloseAccountService;
import com.weaver.general.TimeUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @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 List<PAResponseEntity> closeAccount(Map<String, Object> param) {
String billid = Util.null2String(param.get("billid"));
RecordSet rs = new RecordSet();
String subCompanyIds = "";
String departmentIds = "";
String startDate = "";
String endDate = "";
//0 发起 1 归档
String type = Util.null2String(param.get("type"));
rs.executeQuery("select gzfb,gzbm,ksrq,jsrq from uf_kqgzjl where id = ?",billid);
if (rs.next()) {
subCompanyIds = Util.null2String(rs.getString("gzfb"));
departmentIds = Util.null2String(rs.getString("gzbm"));
startDate = Util.null2String(rs.getString("ksrq"));
endDate = Util.null2String(rs.getString("jsrq"));
}
String currentTime = TimeUtil.getCurrentTimeString();
String lastname = user.getLastname();
List<PAResponseEntity> paResponseEntities = new ArrayList<>();
List<KqCloseSet> workflowList = getWorkflowList();
List<Integer> workflowIds = workflowList.stream()
.map(KqCloseSet::getWorkflowId)
.collect(Collectors.toList());
String join = CollectionUtil.join(workflowIds, ",");
WorkflowRequestOperatePA operatePA = getRequestOperatePA();
//1.获取系统流程数据,根据关账流程配置中流程id
rs.executeQuery("select a.requestid,a.currentnodeid,a.workflowid,a.creater,b.formid from \n" +
" workflow_requestbase a left join workflow_base b on a.workflowid = b.id \n" +
" where a.workflowid in ("+join+") and a.currentnodetype not in (0,3)");
//2.根据表单id,及配置字段参数,.获取分部or部门 开始日期和结束日期
while (rs.next()) {
int requestid = Util.getIntValue(rs.getString("requestid"));
int currentnodeid = Util.getIntValue(rs.getString("currentnodeid"));
int workflowid = Util.getIntValue(rs.getString("workflowid"));
int creater = Util.getIntValue(rs.getString("creater"));
int formid = Math.abs(Util.getIntValue(rs.getString("formid")));
String tableName = "formtable_main_"+formid;
KqCloseSet kqCloseSet = workflowList.stream()
.filter(k -> Objects.equals(k.getWorkflowId(), workflowid))
.findFirst()
.orElse(null);
//3 值匹配筛选requestid
if (checkRange(kqCloseSet,requestid,tableName,subCompanyIds,departmentIds,startDate,endDate)) {
//4.流程干预操作
ReqOperateRequestEntity requestParam = new ReqOperateRequestEntity();
requestParam.setRequestId(requestid);
requestParam.setSrc("intervenor");
requestParam.setWorkflowId(workflowid);
requestParam.setNodeId(currentnodeid);
requestParam.setRemark(currentTime+"-"+lastname+"-于考勤模块统一干预处理。");
requestParam.setEnableIntervenor(true);
requestParam.setSubmitNodeId("0".equals(type) ? kqCloseSet.getCreateNodeId() : kqCloseSet.getEndNodeId());
requestParam.setIntervenorid(String.valueOf(creater));
PAResponseEntity paResponseEntity = operatePA.doIntervenor(user, requestParam);
paResponseEntity.setExtra(requestid);
paResponseEntities.add(paResponseEntity);
}
}
//5.更新关账记录表操作者信息
currentTime = currentTime.substring(0, currentTime.length() - 3);
rs.executeUpdate("update uf_kqgzjl set czr = ?, zhczsj = ? where id = ?",user.getUID(),currentTime,billid);
return paResponseEntities;
}
@Override
public List<KqCloseSet> getWorkflowList() {
List<KqCloseSet> kqCloseSets = new ArrayList<>();
RecordSet rs = new RecordSet();
rs.executeQuery("select id,lclj,ksrqdyzdbm,jsrqdyzdbm,ssfbdyzdbm,ssbmdyzdbm,fqjdid,gdjdid from uf_kqgzpz");
while (rs.next()) {
kqCloseSets.add(KqCloseSet.builder()
.id(Util.getIntValue(rs.getString("id")))
.workflowId(Util.getIntValue(rs.getString("lclj")))
.startDateCode(Util.null2String(rs.getString("ksrqdyzdbm")))
.endDateCode(Util.null2String(rs.getString("jsrqdyzdbm")))
.fbCode(Util.null2String(rs.getString("ssfbdyzdbm")))
.bmCode(Util.null2String(rs.getString("ssbmdyzdbm")))
.createNodeId(Util.getIntValue(rs.getString("fqjdid")))
.endNodeId(Util.getIntValue(rs.getString("gdjdid")))
.build());
}
return kqCloseSets;
}
@Override
public Boolean checkSubmit(Map<String, Object> param) {
String subCompanyIds = Util.null2String(param.get("subCompanyIds"));
String departmentIds = Util.null2String(param.get("departmentIds"));
String startDate = Util.null2String(param.get("startDate"));
String endDate = Util.null2String(param.get("endDate"));
boolean result = false;
RecordSet rs = new RecordSet();
String sql = "select id from uf_kqgzjl where ksrq <= ? and jsrq >= ? and gbzt in (1,2)";
String sql1 = "select id from uf_kqgzjl where ksrq <= ? and jsrq >= ? and gbzt in (1,2)";
if(!subCompanyIds.isEmpty()) {
//like
sql += " and gzfb is not null and (','||gzfb||',' like '%,"+subCompanyIds+",%')";
rs.executeQuery(sql,endDate,startDate);
result = rs.getCounts()>0;
}
if (!departmentIds.isEmpty() && !result) {
sql1 += " and gzbm is not null and (','||gzbm||',' like '%,"+departmentIds+",%')";
rs.executeQuery(sql1,endDate,startDate);
result = rs.getCounts()>0;
}
rs.writeLog("KqCloseAccountServiceImpl:checkSubmit:"+sql);
rs.writeLog("KqCloseAccountServiceImpl:checkSubmit1:"+sql1);
return result;
}
/**
*
* @return
*/
private Boolean checkRange(KqCloseSet kqCloseSet,int requestid,String tableName,
String subCompanyIds,String departmentIds,String startDate,String endDate) {
boolean result = false;
RecordSet rs = new RecordSet();
String sql = "select id from "+tableName+" where requestid = ? and "+kqCloseSet.getStartDateCode()+" <= ? and "+kqCloseSet.getEndDateCode()+" >= ?";
String sql1 = "select id from "+tableName+" where requestid = ? and "+kqCloseSet.getStartDateCode()+" <= ? and "+kqCloseSet.getEndDateCode()+" >= ?";
if(!subCompanyIds.isEmpty()) {
String fbCode = kqCloseSet.getFbCode();
sql += " and "+fbCode+" is not null and "+fbCode+" in ("+subCompanyIds+")";
rs.executeQuery(sql,requestid,endDate,startDate);
result = rs.getCounts()>0;
}
if (!departmentIds.isEmpty() && !result) {
String bmCode = kqCloseSet.getBmCode();
sql1 += " and "+bmCode+" is not null and "+bmCode+" in ("+departmentIds+")";
rs.executeQuery(sql1,requestid,endDate,startDate);
result = rs.getCounts()>0;
}
rs.writeLog("KqCloseAccountServiceImpl:checkRange:"+sql);
rs.writeLog("KqCloseAccountServiceImpl:checkRange1:"+sql1);
return result;
}
}

@ -1,191 +0,0 @@
package com.engine.xmgsecond.util;
import com.engine.xmgsecond.entity.DeptCodeRule;
import org.apache.commons.lang.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.StringUtil;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @Author liang.cheng
* @Date 2025/3/25 14:48
* @Description:
* @Version 1.0
*/
public class DepartmentCodeUtil {
private static final Map<String, int[]> DEPT_LABEL_MAP = new HashMap<>();
static {
DEPT_LABEL_MAP.put("1", new int[]{1, 3});
DEPT_LABEL_MAP.put("2", new int[]{3, 5});
DEPT_LABEL_MAP.put("3", new int[]{5, 7});
}
public String generateRuleCode(String subcompanyId,String deptId, String lastSupdepid) {
RecordSet rs = new RecordSet();
//1.根据分部获取新部门编码规则表信息
DeptCodeRule deptCodeRule = null;
rs.executeQuery("select id,fb,bs,yjbmls,ejbmls,sjbmls,bz from uf_departmentcode_rules where fb = ?",subcompanyId);
if (rs.next()) {
deptCodeRule = DeptCodeRule.builder()
.id(Util.getIntValue(rs.getString("id")))
.subcompany(Util.getIntValue(rs.getString("fb")))
.code(Util.null2String(rs.getString("bs")))
.firstNum(Util.null2String(rs.getString("yjbmls")))
.secondNum(Util.null2String(rs.getString("ejbmls")))
.threeNum(Util.null2String(rs.getString("sjbmls")))
.build();
}
if (deptCodeRule == null) {
//新部门编码规则表未设置规则情况下 不进行编码直接返回
return "";
}
//2.获取该部门所有上级部门 (需求确认 部门层级最多只有3级),并获取对应的流水号,若不存在为 00
//导入时缓存无法获取部门信息 String lastSupCode = deptInfo.getDepartmentCode(lastSupdepid);
DepartmentComInfo deptInfo = new DepartmentComInfo();
//上级部门id
if (StringUtil.isEmpty(lastSupdepid)) {
lastSupdepid = deptInfo.getDepartmentsupdepid(deptId);
}
Map<String, String> lastData = getDepartmentCode(lastSupdepid);
String lastSupCode = lastData.get("departmentcode");
lastSupdepid = lastSupdepid == null || lastSupdepid.isEmpty() ? "0" : lastSupdepid;
//上上级部门id
Map<String, String> lastTopData = getDepartmentCode(lastSupdepid);
String lastTopSupdepid = lastTopData.get("supdepid");
lastTopSupdepid = lastTopSupdepid == null || lastTopSupdepid.isEmpty() ? "0" : lastTopSupdepid;
String lastTopSupCode = lastTopData.get("departmentcode");
// 例如一级部门 lastSupdepid="0",lastTopSupdepid="0"
// 例如二级部门 lastSupdepid="2726",lastTopSupdepid="0"
// 例如三级部门 lastSupdepid="2730",lastTopSupdepid="2726"
String deptLevel = "";
String serialnum = "";
String departmentCode;
if ("0".equals(lastSupdepid)) {
// 一级部门
serialnum = deptCodeRule.getFirstNum();
deptLevel = "1";
departmentCode = deptCodeRule.getCode() + "%s0000";
} else if ("0".equals(lastTopSupdepid)) {
// 二级部门
serialnum = deptCodeRule.getSecondNum();
deptLevel = "2";
String firstSerial = getSubstringByLevel(lastSupCode, "1");
departmentCode = deptCodeRule.getCode() + firstSerial + "%s00";
} else {
// 三级部门
serialnum = deptCodeRule.getThreeNum();
deptLevel = "3";
String secondSerial = getSubstringByLevel(lastSupCode, "2");
String firstSerial = getSubstringByLevel(lastTopSupCode,"1");
departmentCode = deptCodeRule.getCode() + firstSerial + secondSerial + "%s";
}
//3.获取当前部门序列号1.截取该层级所有部门的流水号比较
List<String> departmentSerial = getDepartmentSerial(subcompanyId, deptCodeRule.getCode(), deptLevel);
if ("00".equals(serialnum)) {
departmentSerial.add(serialnum);
}
//如果本身已经存在编码 需要移除该编号
if (StringUtils.isNotEmpty(deptId)) {
String code = getSubstringByLevel(deptInfo.getDepartmentCode(deptId),deptLevel);
departmentSerial.removeIf(element -> element.equals(code));
}
//List<String>中元素 ["01","02","03","06","05","24","08"] 如 01 - 24若是连续且存在 则当前部门流水号 24+12.若不连续则使用跳号中最小的数字作为当前部门流水号
List<Integer> sortedNumbers = departmentSerial.stream()
.map(Integer::parseInt)
.sorted()
.collect(Collectors.toList());
// 查找跳号
int nextNumber = IntStream.rangeClosed(1, sortedNumbers.isEmpty() ? 1 : sortedNumbers.get(sortedNumbers.size() - 1) + 1)
.filter(num ->!sortedNumbers.contains(num))
.findFirst()
.orElseGet(() -> sortedNumbers.isEmpty() ? 1 : sortedNumbers.get(sortedNumbers.size() - 1) + 1);
// 格式化结果
String newSerialnum = String.format("%02d", nextNumber);
//4.更新部门规则表流水号
//检查是否存在跳号 如果是跳号则不更新 true为不是跳号
boolean isJump = nextNumber > Integer.parseInt(serialnum);
if (isJump) {
Map<String,String> fieldMap = new HashMap<>();
fieldMap.put("1", "yjbmls");
fieldMap.put("2", "ejbmls");
fieldMap.put("3", "sjbmls");
String field = fieldMap.get(deptLevel);
rs.executeUpdate("update uf_departmentcode_rules set "+field+" = ? where id = ?",newSerialnum,deptCodeRule.getId());
}
return String.format(departmentCode,newSerialnum);
}
public List<String> getDepartmentSerial(String subcompanyId,String code,String deptLevel) {
RecordSet rs = new RecordSet();
List<String> deptSerial = new ArrayList<>();
rs.executeQuery("select departmentcode from hrmdepartment where subcompanyid1 = ? and departmentcode like '"+code+"%'",subcompanyId);
while (rs.next()) {
String departmentcode = Util.null2String(rs.getString("departmentcode"));
//D010000 deptLevel="1" 截取23位 deptLevel="2" 截取45位 deptLevel="3" 截取67位
String serialNumber = getSubstringByLevel(departmentcode, deptLevel);
deptSerial.add(serialNumber);
}
//去除List<String>中 为 00 的元素 ["00","01","02","03","06","05","00"]
return deptSerial.stream()
.filter(element -> !"00".equals(element))
.collect(Collectors.toList());
}
public String getSubstringByLevel(String str, String deptLevel) {
// 根据 deptLevel 获取对应的索引范围
int[] indices = DEPT_LABEL_MAP.get(deptLevel);
if (indices != null && str.length() >= indices[1]) {
// 若存在对应的索引范围且字符串长度足够,则进行截取
return str.substring(indices[0], indices[1]);
}
return "00";
}
public Map<String,String> getDepartmentCode(String deptId) {
RecordSet rs = new RecordSet();
Map<String,String> data = new HashMap<>();
rs.executeQuery("select departmentcode,supdepid from hrmdepartment where id = ?",deptId);
rs.next();
data.put("departmentcode",Util.null2String(rs.getString("departmentcode")));
data.put("supdepid",Util.null2String(rs.getString("supdepid")));
return data;
}
}

@ -1,171 +0,0 @@
package com.engine.xmgsecond.util;
import com.engine.xmgsecond.entity.DeptCodeRule;
import org.apache.commons.lang.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.StringUtil;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @Author liang.cheng
* @Date 2025/3/25 14:48
* @Description:
* @Version 1.0
*/
public class DepartmentNewCodeUtil {
private static final Map<String, int[]> DEPT_LABEL_MAP = new HashMap<>();
static {
DEPT_LABEL_MAP.put("1", new int[]{1, 3});
DEPT_LABEL_MAP.put("2", new int[]{3, 5});
DEPT_LABEL_MAP.put("3", new int[]{5, 7});
}
public String generateRuleCode(String subcompanyId,String deptId, String lastSupdepid) {
RecordSet rs = new RecordSet();
//1.根据分部获取新部门编码规则表信息
DeptCodeRule deptCodeRule = null;
rs.executeQuery("select id,fb,bs from uf_departmentcode_rules where fb = ?",subcompanyId);
if (rs.next()) {
deptCodeRule = DeptCodeRule.builder()
.id(Util.getIntValue(rs.getString("id")))
.subcompany(Util.getIntValue(rs.getString("fb")))
.code(Util.null2String(rs.getString("bs")))
.build();
}
if (deptCodeRule == null) {
//新部门编码规则表未设置规则情况下 不进行编码直接返回
return "";
}
//2.获取该部门所有上级部门 (需求确认 部门层级最多只有3级),并获取对应的流水号,若不存在为 00
//导入时缓存无法获取部门信息 String lastSupCode = deptInfo.getDepartmentCode(lastSupdepid);
DepartmentComInfo deptInfo = new DepartmentComInfo();
//上级部门id
if (StringUtil.isEmpty(lastSupdepid)) {
lastSupdepid = deptInfo.getDepartmentsupdepid(deptId);
}
Map<String, String> lastData = getDepartmentCode(lastSupdepid);
String lastSupCode = lastData.get("departmentcode");
lastSupdepid = lastSupdepid == null || lastSupdepid.isEmpty() ? "0" : lastSupdepid;
//上上级部门id
Map<String, String> lastTopData = getDepartmentCode(lastSupdepid);
String lastTopSupdepid = lastTopData.get("supdepid");
lastTopSupdepid = lastTopSupdepid == null || lastTopSupdepid.isEmpty() ? "0" : lastTopSupdepid;
String lastTopSupCode = lastTopData.get("departmentcode");
// 例如一级部门 lastSupdepid="0",lastTopSupdepid="0"
// 例如二级部门 lastSupdepid="2726",lastTopSupdepid="0"
// 例如三级部门 lastSupdepid="2730",lastTopSupdepid="2726"
String deptLevel = "";
String departmentCode;
if ("0".equals(lastSupdepid)) {
// 一级部门
deptLevel = "1";
departmentCode = deptCodeRule.getCode() + "%s0000";
} else if ("0".equals(lastTopSupdepid)) {
// 二级部门
deptLevel = "2";
String firstSerial = getSubstringByLevel(lastSupCode, "1");
departmentCode = deptCodeRule.getCode() + firstSerial + "%s00";
} else {
// 三级部门
deptLevel = "3";
String secondSerial = getSubstringByLevel(lastSupCode, "2");
String firstSerial = getSubstringByLevel(lastTopSupCode,"1");
departmentCode = deptCodeRule.getCode() + firstSerial + secondSerial + "%s";
}
//3.根据当前部门所属层级 获取上级部门与该部门相同的部门编号进行比较
List<String> departmentSerial = getDepartmentSerial(subcompanyId, deptCodeRule.getCode(), deptLevel,lastSupdepid);
//如果本身已经存在编码 需要移除该编号
if (StringUtils.isNotEmpty(deptId)) {
String code = getSubstringByLevel(deptInfo.getDepartmentCode(deptId),deptLevel);
departmentSerial.removeIf(element -> element.equals(code));
}
//List<String>中元素 ["01","02","03","06","05","24","08"] 如 01 - 24若是连续且存在 则当前部门流水号 24+12.若不连续则使用跳号中最小的数字作为当前部门流水号
List<Integer> sortedNumbers = departmentSerial.stream()
.map(Integer::parseInt)
.sorted()
.collect(Collectors.toList());
// 查找跳号
int nextNumber = IntStream.rangeClosed(1, sortedNumbers.isEmpty() ? 1 : sortedNumbers.get(sortedNumbers.size() - 1) + 1)
.filter(num ->!sortedNumbers.contains(num))
.findFirst()
.orElseGet(() -> sortedNumbers.isEmpty() ? 1 : sortedNumbers.get(sortedNumbers.size() - 1) + 1);
// 格式化结果
String newSerialnum = String.format("%02d", nextNumber);
return String.format(departmentCode,newSerialnum);
}
public List<String> getDepartmentSerial(String subcompanyId,String code,String deptLevel,String lastSupdepid) {
RecordSet rs = new RecordSet();
List<String> deptSerial = new ArrayList<>();
rs.executeQuery("select departmentcode from hrmdepartment where subcompanyid1 = ? and departmentcode like '"+code+"%' and supdepid = ?",subcompanyId,lastSupdepid);
while (rs.next()) {
String departmentcode = Util.null2String(rs.getString("departmentcode"));
//D010000 deptLevel="1" 截取23位 deptLevel="2" 截取45位 deptLevel="3" 截取67位
String serialNumber = getSubstringByLevel(departmentcode, deptLevel);
deptSerial.add(serialNumber);
}
//去除List<String>中 为 00 的元素 ["00","01","02","03","06","05","00"]
return deptSerial.stream()
.filter(element -> !"00".equals(element))
.collect(Collectors.toList());
}
public String getSubstringByLevel(String str, String deptLevel) {
// 根据 deptLevel 获取对应的索引范围
int[] indices = DEPT_LABEL_MAP.get(deptLevel);
if (indices != null && str.length() >= indices[1]) {
// 若存在对应的索引范围且字符串长度足够,则进行截取
return str.substring(indices[0], indices[1]);
}
return "00";
}
public Map<String,String> getDepartmentCode(String deptId) {
RecordSet rs = new RecordSet();
Map<String,String> data = new HashMap<>();
rs.executeQuery("select departmentcode,supdepid from hrmdepartment where id = ?",deptId);
rs.next();
data.put("departmentcode",Util.null2String(rs.getString("departmentcode")));
data.put("supdepid",Util.null2String(rs.getString("supdepid")));
return data;
}
}

@ -1,159 +0,0 @@
package com.engine.xmgsecond.util;
import com.engine.xmgsecond.entity.KqFormatTotal;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @Author liang.cheng
* @Date 2025/5/14 16:16
* @Description:
* @Version 1.0
*/
public class KqCalulateUtil {
/**
* @Description:
* @Author: liang.cheng
* @Date: 2025/5/14 16:22
* @param: [resourceId, fromDate, toDate]
* @return: java.util.List<com.engine.xmgsecond.entity.KqFormatTotal>
*/
public static List<KqFormatTotal> abnormalAttendance(String resourceId,String fromDate,String toDate) {
RecordSet rs = new RecordSet();
List<KqFormatTotal> kqFormatTotalList = new ArrayList<>();
rs.executeQuery("select resourceid, forgotCheck,forgotbeginworkcheck, absenteeism, beLateMins, gravebeLateMins, leaveEearly, " +
" graveLeaveEarly from kq_format_total where resourceid = ? and kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"'",resourceId);
while (rs.next()) {
boolean isAbsence;
int absenteeism = Util.getIntValue(rs.getString("absenteeism"));
int forgotCheck = Util.getIntValue(rs.getString("forgotCheck"));
int forgotbeginworkcheck = Util.getIntValue(rs.getString("forgotbeginworkcheck"));
int beLateMins = Util.getIntValue(rs.getString("beLateMins"),0);
int gravebeLateMins = Util.getIntValue(rs.getString("gravebeLateMins"),0);
int leaveEearly = Util.getIntValue(rs.getString("leaveEearly"));
int graveLeaveEarly = Util.getIntValue(rs.getString("graveLeaveEarly"));
//规则1
isAbsence = isPositive(absenteeism) ||
isPositive(forgotCheck) ||
isPositive(forgotbeginworkcheck) ||
sumPositive(leaveEearly, graveLeaveEarly) > 0;
kqFormatTotalList.add(KqFormatTotal.builder()
.resourceId(Util.getIntValue(rs.getString("resourceid")))
.beLateMins(beLateMins)
.gravebeLateMins(gravebeLateMins)
.isAbsence(isAbsence)
.absenceDays(isAbsence ? 1 : 0)
.build());
}
//规则2
AtomicInteger graceCounter = new AtomicInteger(0);
kqFormatTotalList.forEach(record -> {
if (!record.isAbsence()) {
int lateMinutes = sumNullSafe(record.getBeLateMins(), record.getGravebeLateMins());
record.setAbsenceDays(calculateAbsenceDays(lateMinutes, graceCounter));
}
});
rs.writeLog("kqFormatTotalList2:"+kqFormatTotalList.toString());
return kqFormatTotalList;
}
/**
* @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;
}
// 辅助方法:安全求和(处理 null 情况)
public static int sumPositive(Integer a, Integer b) {
return Optional.ofNullable(a).orElse(0) + Optional.ofNullable(b).orElse(0);
}
private static double calculateAbsenceDays(int lateMinutes, AtomicInteger graceCounter) {
if (lateMinutes <= 0) {
return 0;
}
if (graceCounter.get() < 3 && lateMinutes > 0 && lateMinutes <= 15) {
graceCounter.incrementAndGet();
return 0;
}
return (lateMinutes > 0 && lateMinutes <= 240) ? 0.5 : 1;
}
private static int sumNullSafe(Integer a, Integer b) {
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 signoutdate > '"+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;
}
}

@ -1,85 +0,0 @@
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.POST;
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);
}
@GET
@Path("/getWorkflowList")
@Produces(MediaType.TEXT_PLAIN)
public String getWorkflowList(@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).getWorkflowList());
data.put("code", 200);
} catch (Exception e) {
data.put("code", 500);
data.put("msg", "catch exception : " + e.getMessage());
}
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
}
@GET
@Path("/checkSubmit")
@Produces(MediaType.TEXT_PLAIN)
public String checkSubmit(@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).checkSubmit(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);
}
}

@ -1,515 +0,0 @@
package weaver.hrm.excelimport;
import com.engine.common.service.impl.HrmCommonServiceImpl;
import com.engine.hrm.entity.RuleCodeType;
import com.engine.hrm.util.CodeRuleManager;
import com.engine.hrm.util.HrmTriggerUtil;
import com.engine.hrm.util.face.HrmFaceCheckManager;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.common.AjaxManager;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.matrix.MatrixUtil;
import weaver.rtx.OrganisationCom;
import weaver.systeminfo.SysMaintenanceLog;
import weaver.systeminfo.SystemEnv;
import weaver.hrm.common.DbFunctionUtil;
/**
*
* @author lvyi
*
*/
public class HrmCompany extends BaseBean {
private RecordSet recordSet=new RecordSet();
private OrganisationCom rtxService=new OrganisationCom();; //添加到rtx
private int id;
private String subcompanyname="";
private String departmentname="";
private String subcompanycode = "";
private Float subcompanyshoworder;
private String departmentcode = "";
private Float departmentshoworder;
private int userlanguage = 7;
private int pid;
private String operateType;
private String message = "";
public void setPid(int pid) {
this.pid = pid;
}
public void setUserLanguage(String userlanguage){
this.userlanguage = Util.getIntValue((String)userlanguage);
}
/**
*
* @return
*/
public String valExcelData(){
String errorInfo = "";
if(Util.null2String(this.subcompanyname).length()==0){
errorInfo = SystemEnv.getHtmlLabelName(125704,userlanguage);
return errorInfo;
}
if (StringUtils.isNotEmpty(operateType) && operateType.equals("add")) {
if (!verifySubCompanyCode(subcompanycode)) return subcompanycode + "编号重复";
if (!verifyDeptCode(departmentcode)) return departmentcode + "编号重复";
}
return errorInfo;
}
/**
*
*/
public String save(){
boolean flag = false;
try{
if(StringUtils.isNotEmpty(operateType)) {
if (operateType.equals("add")) {
int subcompanyid = 0;
int departmentid = 0;
if(Util.null2String(this.subcompanyname).length()>0){
//取分部
subcompanyid = getSubCompanyId(this.subcompanyname);
}
departmentid = getDeptId(this.departmentname,subcompanyid);
if(Util.null2String(this.departmentname).length()>0){
if(departmentid!=0)flag=true;
}else{
if(subcompanyid!=0)flag=true;
}
} else if (operateType.equals("update")) {
int subcompanyid = updateSubCompany();
if (subcompanyid == -1) return String.valueOf(flag);
int deptid = updateDept(subcompanyid);
if (deptid == -1) return String.valueOf(flag);
flag = true;
}
}
}catch(Exception e){
writeLog(e);
}
return String.valueOf(flag);
}
private boolean verifySubCompanyCode(String code) {
if (StringUtils.isEmpty(code)) return true;
RecordSet recordSet = new RecordSet();
String sql = "select id from HrmSubCompany where subcompanycode = ?";
recordSet.executeQuery(sql, code);
if (recordSet.getCounts() > 0) return false;
return true;
}
private boolean verifySubCompanyCode(String code, String name, int supsubcomid) {
if (StringUtils.isEmpty(code)) return true;
RecordSet recordSet = new RecordSet();
String sql = "select id from HrmSubCompany where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?";
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "select id from HrmSubCompany where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?";
}
recordSet.executeQuery(sql, name, supsubcomid);
if (recordSet.next()) {
String id = recordSet.getString("id");
sql = "select id from HrmSubCompany where subcompanycode = ? and id != ?";
recordSet.executeQuery(sql, code, id);
if (recordSet.getCounts() > 0) return false;
return true;
}
return verifySubCompanyCode(code);
}
private boolean verifyDeptCode(String code) {
if (StringUtils.isEmpty(code)) return true;
RecordSet recordSet = new RecordSet();
String sql = "select id from HrmDepartment where departmentcode = ?";
recordSet.executeQuery(sql, code);
if (recordSet.getCounts() > 0) return false;
return true;
}
private boolean verifyDeptCode(String code, String name, int subcompanyid, int supdepid) {
if (StringUtils.isEmpty(code)) return true;
RecordSet recordSet = new RecordSet();
String sql = "select id from HrmDepartment where ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ?";
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "select id from HrmDepartment where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ?";
}
recordSet.executeQuery(sql, name, subcompanyid, supdepid);
if (recordSet.next()) {
String id = recordSet.getString("id");
sql = "select id from HrmDepartment where departmentcode = ? and id != ?";
recordSet.executeQuery(sql, code, id);
if (recordSet.getCounts() > 0) return false;
return true;
}
return verifyDeptCode(code);
}
private int updateDept(int subcompanyid) {
String deptNames[] = departmentname.split(">");
int currentId = 0;
int parentId = 0;
String departmentcode = "";
Float departmentshoworder = null;
for (int i = 0; i < deptNames.length; i++) {
if (StringUtils.isEmpty(deptNames[i])) continue;
String sql = "select * from HrmDepartment where subcompanyid1="+ subcompanyid + " and ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptNames[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)";
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "select * from HrmDepartment where subcompanyid1="+ subcompanyid + " and ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptNames[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)";
}
currentId = getResultSetId(sql);
if (currentId == 0) {
// 部门不存在
// 不存在
this.setMessage("" + deptNames[i] + "部门不存在");
return -1;
}
if (i == deptNames.length - 1) {
// 最后一层级 赋值编码和顺序
departmentcode = this.departmentcode;
departmentshoworder = this.departmentshoworder;
}
if (StringUtils.isNotEmpty(departmentcode) || departmentshoworder != null) {
recordSet.executeQuery(sql);
recordSet.next();
if (departmentshoworder == null) departmentshoworder = Float.valueOf(Util.null2s(recordSet.getString("showorder"), "0"));
if (StringUtils.isEmpty(departmentcode)) departmentcode = Util.null2String(recordSet.getString("departmentcode"), "");
if (verifyDeptCode(departmentcode, deptNames[i], subcompanyid, parentId)) {
sql = "update hrmdepartment set departmentcode = ? , showorder = ? where ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ? and (canceled !=1 or canceled is null)";
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "update hrmdepartment set departmentcode = ? , showorder = ? where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ? and (canceled !=1 or canceled is null)";
}
recordSet.executeUpdate(sql, departmentcode, departmentshoworder, deptNames[i], subcompanyid, parentId);
} else {
setMessage("" + departmentcode + "编号重复");
return -1;
}
}
parentId = currentId;
}
return currentId;
}
private int updateSubCompany(){
String subcompanynames[] = subcompanyname.split(">");
int parentId = 0;
int currentId = 0;
String subcompanycode = "";
Float subcompanyshoworder = null;
for (int i = 0; i < subcompanynames.length; i++) {
if (StringUtils.isEmpty(subcompanynames[i])) continue;
String sql = "select * from HrmSubCompany where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='"
+ subcompanynames[i].trim() + "' and supsubcomid=" + parentId;
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "select * from HrmSubCompany where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='"
+ subcompanynames[i].trim() + "' and supsubcomid=" + parentId;
}
currentId = getResultSetId(sql);
if (currentId == 0) {
// 不存在
this.setMessage("" + subcompanynames[i] + "分部不存在");
return -1;
}
if (i == subcompanynames.length - 1) {
// 最后一层级 赋值编码和顺序
subcompanycode = this.subcompanycode;
subcompanyshoworder = this.subcompanyshoworder;
}
// 如果编码和顺序不存在则不更新
if (StringUtils.isNotEmpty(subcompanycode) || subcompanyshoworder != null) {
recordSet.executeQuery(sql);
recordSet.next();
if (subcompanyshoworder == null) subcompanyshoworder = Float.valueOf(Util.null2s(recordSet.getString("showorder"), "0"));
if (StringUtils.isEmpty(subcompanycode)) subcompanycode = Util.null2String(recordSet.getString("subcompanycode"), "");
if (verifySubCompanyCode(subcompanycode, subcompanynames[i], parentId)) {
sql = "update HrmSubCompany set subcompanycode= ? , showorder = ? where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?";
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "update HrmSubCompany set subcompanycode= ? , showorder = ? where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?";
}
recordSet.executeUpdate(sql, subcompanycode, subcompanyshoworder, subcompanynames[i], parentId);
} else {
setMessage("" + subcompanycode + "编号重复");
return -1;
}
}
parentId = currentId;
}
return currentId;
}
/**
* Id
* @param subCompanyName eg广>
* @return
*/
public int getSubCompanyId(String subcompanyname) {
String subcompanynames[] = subcompanyname.split(">");
int currentId = 0;
int parentId = 0;
String sql = "";
String sqlInsert = "";
String subcompanycode = "";
Float subcompanyshoworder = null;
for (int i = 0; i < subcompanynames.length; i++) {
if(subcompanynames[i] ==null && subcompanynames[i].equals("")){
continue;
}
sql = "select id from HrmSubCompany where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='"
+ subcompanynames[i].trim() + "' and supsubcomid=" + parentId;
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "select id from HrmSubCompany where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='"
+ subcompanynames[i].trim() + "' and supsubcomid=" + parentId;
}
currentId = getResultSetId(sql);
//added by wcd 2015-02-06 [限制分部数]
if (currentId == 0) {
if (i == subcompanynames.length - 1) {
// 最后一层级 赋值编码和顺序
subcompanycode = this.subcompanycode;
subcompanyshoworder = this.subcompanyshoworder;
if (subcompanyshoworder == null) subcompanyshoworder = 0.00F;
}
if(AjaxManager.getData("", "getLnScCount;mf").equals("true")){
// 如果编码为空 自动生成编码
try {
subcompanycode = CodeRuleManager.getCodeRuleManager().generateRuleCode(RuleCodeType.SUBCOMPANY, subcompanycode);
} catch (Exception e) {
setMessage("," + e.getMessage());
writeLog(e);
return -1;
}
sqlInsert = "insert into HrmSubCompany(subcompanyname,subcompanydesc,companyid,supsubcomid,subcompanycode,showorder,"+DbFunctionUtil.getInsertColumnSql()+") values('"
+ subcompanynames[i] +"','"+subcompanynames[i]+"',1" + "," + parentId + ",'" + subcompanycode+ "'," + subcompanyshoworder + ","+DbFunctionUtil.getInsertColumnValueSql(new RecordSet().getDBType(), 1)+")"; // 创建
boolean isSuccess = execSql(sqlInsert);
HrmTriggerUtil.generateSubcompanyPinyin(subcompanynames[i], null);
currentId = getResultSetId(sql);
HrmTriggerUtil.Tri_I_SubComKPICheckFlow(String.valueOf(currentId));
sql = "insert into leftmenuconfig (userid,infoid,visible,viewindex,resourceid,resourcetype,locked,lockedbyid,usecustomname,customname,customname_e) select distinct userid,infoid,visible,viewindex," + currentId + ",2,locked,lockedbyid,usecustomname,customname,customname_e from leftmenuconfig where resourcetype=1 and resourceid=1";
execSql(sql);
sql = "insert into mainmenuconfig (userid,infoid,visible,viewindex,resourceid,resourcetype,locked,lockedbyid,usecustomname,customname,customname_e) select distinct userid,infoid,visible,viewindex," + currentId + ",2,locked,lockedbyid,usecustomname,customname,customname_e from mainmenuconfig where resourcetype=1 and resourceid=1";
execSql(sql);
if(isSuccess){
//同步分部数据到矩阵
MatrixUtil.updateSubcompayData("" + currentId);
HrmFaceCheckManager.sync(currentId+"",HrmFaceCheckManager.getOptInsert(),"hrm_import_subcompany",HrmFaceCheckManager.getOaSubcompany());
}
insertSysLog(subcompanynames[i],"12");
} else {
currentId = -1;
}
}
parentId = currentId;
if(currentId != -1)
rtxService.addSubCompany(parentId); //同步RTX
}
return currentId;
}
/**
* id
* @param deptNames
* @param subCompanyId id
* @return
*/
public int getDeptId(String deptNames, int subCompanyId){
String deptName[] = deptNames.split(">");
int currentId = 0;
int parentId = 0;
String sql = "";
String sqlInsert = "";
String departmentcode = "";
Float departmentshoworder = null;
for (int i = 0; i < deptName.length; i++) {
if(deptName[i] == null || deptName[i].equals("")){
continue;
}
sql = "select id from HrmDepartment where subcompanyid1="+ subCompanyId + " and ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptName[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)";
if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){
sql = "select id from HrmDepartment where subcompanyid1="+ subCompanyId + " and ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptName[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)";
}
currentId = getResultSetId(sql);
if (currentId == 0) {
if (i == deptName.length -1) {
departmentcode = this.departmentcode;
departmentshoworder = this.departmentshoworder;
if (departmentshoworder == null) departmentshoworder = 0.00F;
}
// 如果编码为空 自动生成编码
departmentcode = "";
try {
departmentcode = CodeRuleManager.getCodeRuleManager().generateRuleCode(RuleCodeType.DEPARTMENT, String.valueOf(subCompanyId), departmentcode,String.valueOf(parentId));
} catch (Exception e) {
setMessage("" + e.getMessage());
writeLog(e);
return -1;
}
sqlInsert = "insert into HrmDepartment (departmentname,Departmentmark,subcompanyid1,supdepid,departmentcode,showorder,"+DbFunctionUtil.getInsertColumnSql()+") values('"
+ deptName[i]+"','"+deptName[i]+"',"+ subCompanyId+ ","+ parentId + ",'"+ departmentcode + "',"+ departmentshoworder + ","+DbFunctionUtil.getInsertColumnValueSql(new RecordSet().getDBType(), 1)+")"; // 创建
boolean isSuccess = execSql(sqlInsert);
HrmTriggerUtil.generateDepartmentPinyin(deptName[i], null);
currentId = getResultSetId(sql);
HrmTriggerUtil.Tri_I_DeptKPICheckFlow(String.valueOf(currentId));
if(isSuccess){
//同步部门数据到矩阵
MatrixUtil.updateDepartmentData("" + currentId);
HrmFaceCheckManager.sync(currentId+"",HrmFaceCheckManager.getOptInsert(),"hrm_import_deptment",HrmFaceCheckManager.getOaDepartment());
}
insertSysLog(deptName[i],"12");
rtxService.addDepartment(currentId); //同步RTX
}
parentId = currentId;
}
return currentId;
}
/**
* Id
* @param sql
* @return
*/
public int getResultSetId(String sql) {
int currentId = 0;
recordSet.execute(sql);
try {
while (recordSet.next()) {
currentId = recordSet.getInt("id");
}
} catch (Exception e) {
e.printStackTrace();
}
return currentId;
}
/**
*
* @param sql
* @return
*/
public boolean execSql(String sql) {
if(recordSet.execute(sql)){
return true;
}
else{
return false;
}
}
public void removeCache(){
try{
MatrixUtil.sysSubcompayData();
MatrixUtil.sysDepartmentData();
SubCompanyComInfo SubCompanyComInfo = new SubCompanyComInfo();
SubCompanyComInfo.removeCompanyCache();
DepartmentComInfo DepartmentComInfo = new DepartmentComInfo();
DepartmentComInfo.removeCompanyCache();
//初始化应用分权
new weaver.hrm.appdetach.AppDetachComInfo().initSubDepAppData();
}catch (Exception e) {
writeLog(e);
}
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSubcompanyname() {
return subcompanyname;
}
public void setSubcompanyname(String subcompanyname) {
this.subcompanyname = subcompanyname;
}
public String getDepartmentname() {
return departmentname;
}
public void setDepartmentname(String departmentname) {
this.departmentname = departmentname;
}
public String getSubcompanycode() {
return subcompanycode;
}
public void setSubcompanycode(String subcompanycode) {
this.subcompanycode = subcompanycode;
}
public Float getSubcompanyshoworder() {
return subcompanyshoworder;
}
public void setSubcompanyshoworder(Float subcompanyshoworder) {
this.subcompanyshoworder = subcompanyshoworder;
}
public String getDepartmentcode() {
return departmentcode;
}
public void setDepartmentcode(String departmentcode) {
this.departmentcode = departmentcode;
}
public Float getDepartmentshoworder() {
return departmentshoworder;
}
public void setDepartmentshoworder(Float departmentshoworder) {
this.departmentshoworder = departmentshoworder;
}
public String getOperateType() {
return operateType;
}
public void setOperateType(String operateType) {
this.operateType = operateType;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private void insertSysLog(String name, String operateItem) {
SysMaintenanceLog syslog = new SysMaintenanceLog();
syslog.resetParameter();
syslog.setRelatedId(pid);
syslog.setOperateType("-1");
syslog.setOperateItem(operateItem);
syslog.setOperateUserid(0);
syslog.setRelatedName(name);
try {
syslog.setSysLogInfo();
} catch (Exception e) {
writeLog(e);
}
}
}

@ -1,139 +0,0 @@
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;
}
}

@ -1,23 +0,0 @@
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;
}
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save