You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
6.4 KiB
Java
190 lines
6.4 KiB
Java
1 year ago
|
|
||
|
package weaver.interfaces.bnkq.action;
|
||
|
|
||
|
import com.engine.kq.biz.KQWorkTime;
|
||
|
import com.engine.kq.entity.WorkTimeEntity;
|
||
|
import com.engine.workflow.service.HtmlToPdfService;
|
||
|
import org.apache.commons.lang3.StringUtils;
|
||
|
import weaver.conn.RecordSet;
|
||
|
import weaver.general.BaseBean;
|
||
|
import weaver.general.PinyinUtil;
|
||
|
import weaver.general.TimeUtil;
|
||
|
import weaver.general.Util;
|
||
|
import weaver.interfaces.workflow.action.Action;
|
||
|
import weaver.soa.workflow.request.Property;
|
||
|
import weaver.soa.workflow.request.RequestInfo;
|
||
|
|
||
|
import java.math.BigDecimal;
|
||
|
import java.text.ParseException;
|
||
|
import java.text.SimpleDateFormat;
|
||
|
import java.util.*;
|
||
|
|
||
|
/**
|
||
|
* 更新出差时长Action
|
||
|
*/
|
||
|
public class UpdateCcTimeAction implements Action {
|
||
|
|
||
|
static String dateFormat = "yyyy-MM-dd";
|
||
|
static SimpleDateFormat format = new SimpleDateFormat(dateFormat);
|
||
|
|
||
|
public UpdateCcTimeAction() {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String execute(RequestInfo info) {
|
||
|
new BaseBean();
|
||
|
BaseBean bb = new BaseBean();
|
||
|
bb.writeLog("更新人员出差时长");
|
||
|
RecordSet rs = new RecordSet();
|
||
|
int userid = info.getRequestManager().getUser().getUID();
|
||
|
String wfid = info.getWorkflowid();
|
||
|
String reqid = info.getRequestid();
|
||
|
String tablaName = info.getRequestManager().getBillTableName();
|
||
|
try {
|
||
|
//获取主表数据
|
||
|
Map mainInfo = getMainInfo(info);
|
||
|
//申请人
|
||
|
String sqr = Util.null2String(mainInfo.get("ccr"));
|
||
|
//实际出差开始时间
|
||
|
String sjksrq = Util.null2String(mainInfo.get("sjccksrq"));
|
||
|
//实际出差结束时间
|
||
|
String sjccjsrq = Util.null2String(mainInfo.get("sjccjsrq"));
|
||
|
//部门
|
||
|
String szbm = Util.null2String(mainInfo.get("szbm"));
|
||
|
//分部
|
||
|
String szgs = Util.null2String(mainInfo.get("szgs"));
|
||
|
//相差天数
|
||
|
Integer cz = TimeUtil.dateInterval(sjksrq, sjccjsrq) + 1;
|
||
|
//插入出差表
|
||
|
Double czours = multiply(String.valueOf(cz), "8");
|
||
|
|
||
|
Set<String> all = new HashSet<>();
|
||
|
all.add(sjksrq);
|
||
|
List<String> back = days(sjksrq, sjccjsrq);
|
||
|
all.addAll(back);
|
||
|
all.add(sjccjsrq);
|
||
|
KQWorkTime kqWorkTime = new KQWorkTime();
|
||
|
kqWorkTime.setIsFormat(true);
|
||
|
|
||
|
for (String date : all) {
|
||
|
bb.writeLog("date:" + date);
|
||
|
WorkTimeEntity tmpworkTime = kqWorkTime.getWorkTime(sqr, date);
|
||
|
if (tmpworkTime.getWorkMins() > 0) {
|
||
|
bb.writeLog("当天排班了:" + tmpworkTime.getWorkMins());
|
||
|
insertLeave(reqid, Integer.valueOf(sqr), date, 8.00, "3", "1", szgs, szbm, date, wfid, tablaName);
|
||
|
insertDetail(sqr, date, rs);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} catch (Exception e) {
|
||
|
e.printStackTrace();
|
||
|
bb.writeLog(e);
|
||
|
bb.writeLog("更新人员出差时长error" + e.getMessage());
|
||
|
info.getRequestManager().setMessageid("2000");
|
||
|
info.getRequestManager().setMessagecontent("更新人员出差时长error");
|
||
|
return Action.FAILURE_AND_CONTINUE;
|
||
|
}
|
||
|
return Action.SUCCESS;
|
||
|
}
|
||
|
|
||
|
private void insertDetail(String resourceId, String date, RecordSet rs) {
|
||
|
String sql = "update kq_format_detail set evectionMins=480,absenteeismMins=0 where resourceid=? and kqdate='" + date + "'";
|
||
|
rs.executeUpdate(sql, resourceId);
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 获取两个日期之间所有的日期
|
||
|
*
|
||
|
* @param date1
|
||
|
* @param date2
|
||
|
* @return
|
||
|
*/
|
||
|
public static ArrayList days(String date1, String date2) {
|
||
|
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) {
|
||
|
if (str == null)
|
||
|
return null;
|
||
|
|
||
|
try {
|
||
|
return format.parse(str);
|
||
|
} catch (ParseException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 获取主表数据
|
||
|
*
|
||
|
* @param requestInfo
|
||
|
* @return
|
||
|
*/
|
||
|
private static Map getMainInfo(RequestInfo requestInfo) {
|
||
|
Map map = new HashMap();
|
||
|
Property[] property = requestInfo.getMainTableInfo().getProperty();
|
||
|
for (int i = 0; i < property.length; i++) {
|
||
|
map.put(property[i].getName().toLowerCase(), Util.null2String(property[i].getValue()));
|
||
|
}
|
||
|
return map;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 提供精确的乘法运算。
|
||
|
*
|
||
|
* @param v1 被加数
|
||
|
* @param v2 加数
|
||
|
* @return 两个参数的和
|
||
|
*/
|
||
|
public static Double multiply(String v1, String v2) {
|
||
|
BigDecimal b1 = new BigDecimal(v1);
|
||
|
BigDecimal b2 = new BigDecimal(v2);
|
||
|
return b1.multiply(b2).doubleValue();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插入请假拆分表
|
||
|
*
|
||
|
* @param requestid
|
||
|
* @param userid
|
||
|
* @param fromDate
|
||
|
* @param MaxHours
|
||
|
*/
|
||
|
private static void insertLeave(String requestid, Integer userid, String fromDate, Double MaxHours, String durationrule, String newleavetype, String subcompany, String department, String toDate, String wfid, String tablename) {
|
||
|
BaseBean bb = new BaseBean();
|
||
|
//插入加班时间
|
||
|
RecordSet rsInsert = new RecordSet();
|
||
|
String sql = "insert into kq_flow_split_evection (requestid,resourceid,fromdate,fromtime,todate,totime,duration,durationrule,belongdate,newleavetype,subcompanyid,departmentid,workflowid,tablenamedb) "
|
||
|
+ " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
|
||
|
rsInsert.executeUpdate(sql, requestid, userid, fromDate, "08:00", toDate, "17:00", MaxHours, durationrule, fromDate, newleavetype, subcompany, department, wfid, tablename);
|
||
|
bb.writeLog("insertSql:" + sql);
|
||
|
}
|
||
|
}
|