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 all = new HashSet<>(); all.add(sjksrq); List 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); } public static void main(String[] args) { Set all = new HashSet<>(); all.add("2023-12-20"); List back = days("2023-12-20", "2023-12-20"); all.addAll(back); all.add("2023-12-20"); for (String date : all) { System.out.println(date); } } }