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.
weaver-ningbojinghua/src/weaver/interfaces/bnkq/action/UpdateCcTimeAction.java

205 lines
6.7 KiB
Java

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