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 ) ;
}
}
}