diff --git a/src/main/java/cn/timer/api/controller/kqgl/TimeCardController.java b/src/main/java/cn/timer/api/controller/kqgl/TimeCardController.java index 27bb767..7165213 100644 --- a/src/main/java/cn/timer/api/controller/kqgl/TimeCardController.java +++ b/src/main/java/cn/timer/api/controller/kqgl/TimeCardController.java @@ -9,9 +9,6 @@ import java.util.Date; import java.util.List; import java.util.Map; -import javax.management.Query; - -import org.codehaus.jettison.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; @@ -72,6 +69,7 @@ import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.config.exception.CustomException; +import cn.timer.api.controller.kqgl.atttimer.RealTimeUpdate; import cn.timer.api.dao.kqgl.PunchRecordMapper; import cn.timer.api.dao.kqgl.UserAttendanceRelMapper; import cn.timer.api.dao.kqgl.UserEquiRelationMapper; @@ -95,6 +93,7 @@ import cn.timer.api.dao.kqmk.KqglAssoYhkqzMapper; import cn.timer.api.dao.kqmk.KqglAssoYhsbMapper; import cn.timer.api.dao.kqmk.KqglAssoZhoupaibanMapper; import cn.timer.api.dao.kqmk.KqglMainKqzMapper; +import cn.timer.api.dto.kqmk.AdditionalDto; import cn.timer.api.dto.kqmk.AttLateLate; import cn.timer.api.dto.kqmk.AttMemberSettings; import cn.timer.api.dto.kqmk.AttSchedule; @@ -137,6 +136,7 @@ import cn.timer.api.utils.ResponseResult; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; @Api(tags = "3.0[1]考勤模块") @@ -1191,37 +1191,39 @@ public class TimeCardController { @ApiOperationSupport(order = 39) public Result<Integer> DelAttendanceGroup(@CurrentUser UserBean userBean,@PathVariable("id") Integer id) { - List<UserAttendanceRel> attusers = userattendancerelmapper.selectAttendanceOfficerByKqzid(id, userBean.getOrgCode());//该考勤组人数 - //该考勤组所绑定的考勤机 - List<KqglAssoKqzdkfs> kqjs = kqglassokqzdkfsmapper.selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getKqzId, id).eq(KqglAssoKqzdkfs::getType, 1)); - String DevId = ""; - for(KqglAssoKqzdkfs abp:kqjs) { - KqglAssoKqj kqj = KqglAssoKqj.builder().id(abp.getDkfsid()).build().selectById();//查询考勤机“序列号” - if(kqj != null) { - DevId = kqj.getCode(); - for(UserAttendanceRel user:attusers) { - String user_id = user.getEmpnum();//"1692";//要删除的考勤组里面用户ID - - String url = mac_command+"/deleteUser"; - HttpHeaders headers = new HttpHeaders(); - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("devId", DevId); - params.add("userId", user_id); - RestTemplate restTemplate = new RestTemplate(); - HttpEntity httpEntity = new HttpEntity(params, headers); - try { - ResponseEntity<String> request = restTemplate.postForEntity(url, httpEntity, String.class); - System.err.print(request.getBody()); - } catch (RestClientException e) { - System.err.println("提示:考勤机服务出错-5"); - - return ResultUtil.error("删除失败:提示:考勤机服务出错"); - } - } - } + List<UserAttendanceRel> attusers = userattendancerelmapper.selectAttendanceOfficerByKqzid(id, userBean.getOrgCode());//该考勤组人数 + //该考勤组所绑定的考勤机 + List<KqglAssoKqzdkfs> kqjs = kqglassokqzdkfsmapper.selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getKqzId, id).eq(KqglAssoKqzdkfs::getType, 1)); + String DevId = ""; + for(KqglAssoKqzdkfs abp:kqjs) { + KqglAssoKqj kqj = KqglAssoKqj.builder().id(abp.getDkfsid()).build().selectById();//查询考勤机“序列号” + if(kqj != null) { + DevId = kqj.getCode(); + for(UserAttendanceRel user:attusers) { + String user_id = user.getEmpnum();//"1692";//要删除的考勤组里面用户ID + String url = mac_command+"/deleteUser"; + HttpHeaders headers = new HttpHeaders(); + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("devId", DevId); + params.add("userId", user_id); + RestTemplate restTemplate = new RestTemplate(); + HttpEntity httpEntity = new HttpEntity(params, headers); + try { + ResponseEntity<String> request = restTemplate.postForEntity(url, httpEntity, String.class); + System.err.print(request.getBody()); + } catch (RestClientException e) { + System.err.println("提示:考勤机服务出错-5"); + + return ResultUtil.error("删除失败:提示:考勤机服务出错"); + } } - + } + + } + + List<AdditionalDto> userlist = kqglassoleavebalancemapper.RealTimeUpdate(userBean.getOrgCode(),id); + if(KqglMainKqz.builder().id(id).build().deleteById()) { userequirelationmapper.deleteBykqzid(id); @@ -1243,6 +1245,12 @@ public class TimeCardController { //刪除假期规则-适用范围 KqglAssoRulesVice.builder().build().delete(new QueryWrapper<KqglAssoRulesVice>().lambda().eq(KqglAssoRulesVice::getAttgroupId, id)); + try { + realtimeupdate.AttendanceTask(userBean.getOrgCode(), 0, 3,userlist); + } catch (ParseException e) { + e.printStackTrace(); + } + return ResultUtil.data(id,"删除成功"); } return ResultUtil.error("删除失败"); @@ -1258,6 +1266,9 @@ public class TimeCardController { private KqglAssoTeshuMapper kqglassoteshumapper; @Autowired private KqglAssoPbmxMapper kqglassopbmxmapper; + + @Autowired + private RealTimeUpdate realtimeupdate; /** * 新建考勤组 */ @@ -1417,6 +1428,13 @@ public class TimeCardController { kqglassopbmxmapper.insertKqglAssoPbmxList(schlist); } + + try { + realtimeupdate.AttendanceTask(userBean.getOrgCode(), attid, 1,null); + } catch (ParseException e) { + e.printStackTrace(); + } + return ResultUtil.data(attgro,"操作成功!"); } @@ -1448,11 +1466,27 @@ public class TimeCardController { return ResultUtil.data(usatt); } - @SuppressWarnings("all") +// @SuppressWarnings("all") @PostMapping(value = "/setmembers") @ApiOperation(value = "考勤设置成员", httpMethod = "POST", notes = "接口发布说明") public Result<Object> Attsetmembers(@CurrentUser UserBean userBean,@RequestBody AttMemberSettings attsetuser) { + List<KqglAssoKqzdkfs> qtdkfs = kqglassokqzdkfsmapper.selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().ne(KqglAssoKqzdkfs::getType, 1).eq(KqglAssoKqzdkfs::getKqzId, attsetuser.getAttgroupid())); + if(qtdkfs.size() > 0) { + //考勤组新增员工 + String[] addmember = attsetuser.getAddMember(); + for(int a=0;a<addmember.length;a++){ + KqglAssoYhkqz.builder().kqzid(attsetuser.getAttgroupid()).userid(Integer.valueOf(addmember[a])).qyid(userBean.getOrgCode()).build().insert(); + } + + //考勤组减少员工 + String[] removemember = attsetuser.getRemoveMember(); + for(int r=0;r<removemember.length;r++){ + //用户和考勤组关系表 + KqglAssoYhkqz.builder().build().delete(new QueryWrapper<KqglAssoYhkqz>().lambda().eq(KqglAssoYhkqz::getKqzid, attsetuser.getAttgroupid()).eq(KqglAssoYhkqz::getUserid, removemember[r])); + } + } + //确认当前考勤组是否存在考勤机打卡 List<KqglAssoKqzdkfs> dkfs = kqglassokqzdkfsmapper.selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getType, 1).eq(KqglAssoKqzdkfs::getKqzId, attsetuser.getAttgroupid())); if(dkfs.size() > 0) { @@ -1460,8 +1494,12 @@ public class TimeCardController { String DevId = null; int kqjid = 0; KqglAssoKqj kqj = KqglAssoKqj.builder().id(fss.getDkfsid()).build().selectById();//查询考勤机“序列号” - DevId = kqj.getCode(); - kqjid = kqj.getId(); + if(kqj != null) { + DevId = kqj.getCode(); + kqjid = kqj.getId(); + }else { + return ResultUtil.error("考勤机不存在"); + } //考勤组新增员工 String[] addmember = attsetuser.getAddMember(); diff --git a/src/main/java/cn/timer/api/controller/kqgl/atttimer/RealTimeUpdate.java b/src/main/java/cn/timer/api/controller/kqgl/atttimer/RealTimeUpdate.java new file mode 100644 index 0000000..d149770 --- /dev/null +++ b/src/main/java/cn/timer/api/controller/kqgl/atttimer/RealTimeUpdate.java @@ -0,0 +1,752 @@ +package cn.timer.api.controller.kqgl.atttimer; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import cn.timer.api.bean.kqgl.AttendanceWeeklySch; +import cn.timer.api.bean.kqgl.PunchCardDetails; +import cn.timer.api.bean.kqgl.PunchRecord; +import cn.timer.api.bean.kqgl.Schedule; +import cn.timer.api.bean.kqmk.KqglAssoBcsz; +import cn.timer.api.bean.kqmk.KqglAssoLeaveRules; +import cn.timer.api.bean.kqmk.KqglAssoMonthPunchSummary; +import cn.timer.api.bean.kqmk.KqglAssoOvertimeBasics; +import cn.timer.api.bean.kqmk.KqglAssoPbmx; +import cn.timer.api.bean.kqmk.KqglAssoRelationSummary; +import cn.timer.api.bean.kqmk.KqglAssoTeshu; +import cn.timer.api.bean.kqmk.KqglAssoZhoupaiban; +import cn.timer.api.bean.kqmk.KqglMainKqz; +import cn.timer.api.controller.kqgl.ClockInController; +import cn.timer.api.controller.kqgl.ClockInTool; +import cn.timer.api.controller.kqgl.EmptyUtil; +import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper; +import cn.timer.api.dao.kqgl.PunchCardDetailsMapper; +import cn.timer.api.dao.kqgl.PunchRecordMapper; +import cn.timer.api.dao.kqgl.ScheduleMapper; +import cn.timer.api.dao.kqmk.KqglAssoDkmxMapper; +import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper; +import cn.timer.api.dao.kqmk.KqglAssoRelationSummaryMapper; +import cn.timer.api.dao.kqmk.KqglAssoTeshuMapper; +import cn.timer.api.dao.kqmk.KqglMainKqzMapper; +import cn.timer.api.dao.qyzx.QyzxEntInfoMMapper; +import cn.timer.api.dto.kqmk.AdditionalDto; +import cn.timer.api.dto.kqmk.AttSchedule; +import cn.timer.api.dto.kqmk.AttSubsidiaryDto; +import cn.timer.api.dto.kqmk.AttendanceCardListDto; +import cn.timer.api.utils.DateUtil; + +/** + * @author lal + * 考勤报表实时更新 + */ + +@RestController +@Transactional +public class RealTimeUpdate{ + + static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + static SimpleDateFormat sdf2 = new SimpleDateFormat("EEE"); + + static String tablename = null; + @Autowired + private KqglMainKqzMapper kqglmainkqzmapper; + @Autowired + private KqglAssoLeaveBalanceMapper kqglassoleavebalancemapper; + @Autowired + private KqglAssoTeshuMapper kqglassoteshumapper; + @Autowired + private PunchCardDetailsMapper punchcarddetailsmapper; + @Autowired + private AttendanceWeeklySchMapper attendanceweeklyschmapper; + @Autowired + private ScheduleMapper schedulemapper; + @Autowired + private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper; + @Autowired + private PunchRecordMapper punchrecordmapper; + @Autowired + private KqglAssoDkmxMapper kqglassodkmxmapper; + @Autowired + private ClockInController clockincontroller; + + + /** + * @param orgCode 公司组织代码 + * @param numcode 考勤组id或者添加员工id + * @param typeid 1:考勤组 2:添加员工 + * @throws ParseException + */ + public void AttendanceTask(int orgCode,int numcode,int typeid,List<AdditionalDto> userlist_) throws ParseException { + + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 + Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdf1.format(c.getTime()),"yyyy-MM-dd")).getTime(); + //获取当前月最后一天 + Calendar ca = Calendar.getInstance(); + ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); + Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(sdf1.format(ca.getTime()),"yyyy-MM-dd")).getTime(); + + String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString();// + String ttstr = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();// + String yesterday = ClockInTool.requires_extra_times(str,-1,3,1);//前一天 + String[] rangeArray=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),yesterday)).split(";");//目前为止所有日期 + String[] range=rangeArray[0].split(","); + Long endDateyesterday = DateUtil.getnowEndTime(23,DateUtil.getStringTime(yesterday,"yyyy-MM-dd")).getTime(); + + int year = Calendar.getInstance().get(Calendar.YEAR); + int month = Calendar.getInstance().get(Calendar.MONTH) + 1; + int summaryid = 0;//汇总id + + int org_code = orgCode;//企业组织代码 + List<AdditionalDto> userlist = null; + if(typeid == 1) {//考勤组 + userlist = kqglassoleavebalancemapper.RealTimeUpdate(org_code,numcode); + }else if(typeid == 2) {//添加员工 + userlist = kqglassoleavebalancemapper.selectAdditionalByempnum(org_code,numcode); + }else if(typeid == 3) { + userlist = userlist_; + } + + for(AdditionalDto user : userlist) { + + KqglAssoMonthPunchSummary sum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda().eq(KqglAssoMonthPunchSummary::getOrgCode, org_code) + .eq(KqglAssoMonthPunchSummary::getBelongYear, year).eq(KqglAssoMonthPunchSummary::getBelongMonth, month).eq(KqglAssoMonthPunchSummary::getNum, user.getEmpnum())); + + if(sum != null) { + summaryid = sum.getId(); + } + + double traveltotal = 0,egresstotal = 0,overtimetotal = 0; + //出差总时长 + KqglAssoRelationSummary travel = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 3, ttstr); + if(travel !=null) { traveltotal = travel.getDuration(); } + //外出总时长 + KqglAssoRelationSummary egress = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 4, ttstr); + if(egress!=null) { egresstotal = egress.getDuration(); } + //加班总时长 + KqglAssoRelationSummary overtime = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 1, ttstr); + if(overtime!= null) { overtimetotal = overtime.getDuration(); } + //考勤组信息 + KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(user.getEmpnum(),org_code); + //目前为止打卡记录 + List<PunchCardDetails> attendance = punchcarddetailsmapper.selectAttendanceDays(user.getEmpnum(), startDate, endDateyesterday); + int dkjl = 0;//目前为止打卡次数 + int sbqkcs = 0,xbqkcs = 0,dk=0; + String[] sblacks = new String[31];//上班缺卡天数 + String[] xblacks = new String[31];//下班缺卡天数 + String[] dkjtts = new String[attendance.size()];//目前打卡日期明细 + int bccs = 0; + if(attendance.size() > 0) { + dkjl = attendance.size(); + for(PunchCardDetails pcd:attendance){ + AttendanceCardListDto attdate = clockincontroller.MethodCall(org_code, user.getEmpnum(), pcd.getData()); + List<AttSchedule> ashss = attdate.getAttsch();//获取今天应打卡时间 + if(EmptyUtil.isNotEmpty(attdate.getAttsch()) && ashss.get(0).getId() != 0) {//班次不为空 + bccs = attdate.getAttsch().size(); + } + dkjtts[dk] = pcd.getData(); + dk++; + if(bccs == 2 || bccs == 4 || bccs == 6){ + if(pcd.getSbdk1() == null){ + sblacks[sbqkcs] = pcd.getData(); + sbqkcs++; + } + if(pcd.getXbdk1() == null){ + xblacks[xbqkcs] = pcd.getData(); + xbqkcs++; + } + } + if(bccs == 4 || bccs == 6){ + if(pcd.getSbdk2() == null){ + sblacks[sbqkcs] = pcd.getData(); + sbqkcs++; + } + if(pcd.getXbdk2() == null){ + xblacks[xbqkcs] = pcd.getData(); + xbqkcs++; + } + } + if(bccs == 6){ + if(pcd.getSbdk3() == null){ + sblacks[sbqkcs] = pcd.getData(); + sbqkcs++; + } + if(pcd.getXbdk3() == null){ + xblacks[xbqkcs] = pcd.getData(); + xbqkcs++; + } + } + } + + sblacks = ClockInTool.deleteArrayNull(sblacks); + sbqkcs= sblacks.length; + + xblacks = ClockInTool.deleteArrayNull(xblacks); + xbqkcs = xblacks.length; + } + //具体打卡时间入汇总表(打卡成功才会录入汇总表) +// KqglAssoMonthPunchSummary isyessum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda() +// .eq(KqglAssoMonthPunchSummary::getNum, user.getEmpnum()).eq(KqglAssoMonthPunchSummary::getOrgCode, org_code)); + String[] ycqts = new String[31];//应上班的具体天数(yyyy-MM-dd) + String[] xxts = new String[31];//休息的具体天数(yyyy-MM-dd) + List<String> rowData = new ArrayList<String>(); + //休息天数,应出勤天数,实际出勤 + double daysOff = 0,daysOnDuty = 0;//,actualAttDays = 0; + int zjgzts = 0;//目前为止应该出勤的天数 + //工作时长(分钟)、严重迟到次数、严重迟到时长(分钟)、旷工迟到次数 + double workinghours = 0,seriouslatetimes = 0,seriouslatehours = 0,absenlatetimes = 0; + // 迟到次数 迟到时长 早退次数 早退时长 + int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数 + int answer =0;//班次ID + //工作日(转调休)、休息日(转调休)、节假日(转调休) + double workingturncompenleave = 0,restturncompenleave = 0,holidayturncompenleave = 0;//工作日(转调休) + //工作日(转加班费)、休息日(转加班费)、节假日(转加班费) + double workingtransferovertime = 0,resttransferovertime = 0,holidaytransferovertime = 0; + int attgroid = 0; + if(attgro != null){//该员工是否加入到考勤组 排班方式 1:固定排班;2:自由排班;3:自由工时 计算出应出勤,实际出勤,休息天数 + attgroid = attgro.getId(); +// KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); +// //休息天数,应出勤天数,实际出勤 +// double daysOff = 0,daysOnDuty = 0;//,actualAttDays = 0; +// int zjgzts = 0;//目前为止应该出勤的天数 + if(attgro.getPbfs() == 1){ //固定排班 + List<KqglAssoTeshu> bxdklist = kqglassoteshumapper.ShouldSpecialDatessetByKqzid(attgro.getId(), ttstr,1);//当前月 必须打卡日期 + int bxdk = bxdklist.size(); + String[] bxdkss = new String[bxdk];////特殊-必须打卡天数(工作日) + int b = 0; + for(KqglAssoTeshu bxd : bxdklist) { + bxdkss[b] = bxd.getTsrq(); + b++; + } + List<KqglAssoTeshu> wxdk = kqglassoteshumapper.ShouldSpecialDatessetByKqzid(attgro.getId(), ttstr,2);//当前月 无需打卡日期 + String[] appmaps= new String[wxdk.size()];//特殊-无需打卡天数(休息日) + int d1 = 0; + for(KqglAssoTeshu spe:wxdk){ + appmaps[d1] = spe.getTsrq(); + d1++; + } + //应打卡周期时间 + List<AttendanceWeeklySch> atwek = attendanceweeklyschmapper.selectAttendanceMadeByUserid(user.getEmpnum(),org_code); + String[] week= new String[atwek.size()]; + String[] needfig = new String[atwek.size()];//应打卡周期时间 + int e = 0; + for(AttendanceWeeklySch awek : atwek){ + week[e] = awek.getWekmc(); + needfig[e] = String.valueOf(awek.getType());//获取设置的应打卡周几 + e++; + } + String yemo = year + "-" + month; + sdf1.setLenient(false); + int y = 0,q = 0; + for(int i = 1; i <= ClockInTool.getDaysByYearMonth(year,month); i++){ + Date date1 = sdf1.parse(yemo + "-" + i); + for(int u=0;u<week.length;u++){ + if(sdf2.format(date1).equals(week[u])){ + q++; + y++; + if(Arrays.asList(appmaps).contains(String.valueOf(sdf1.format(date1)))){ + y = y-1; + } + } + } + } + //全月时间 - 应打卡时间 - 必须打卡时间 + 无需打卡时间 + int xiuxi = ClockInTool.getDaysByYearMonth(year,month) - q - bxdk + wxdk.size(); + daysOff = xiuxi; + daysOnDuty = y+bxdk; +// String[] range=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),str)).split(";");//目前为止所有日期 +// int zjgzts = 0;//目前为止应该出勤的天数 + //目前为止应出勤天数 + int w = 0,x=0; + int zj = 6; + for(String num : range) { + if(Arrays.binarySearch(needfig, String.valueOf(ClockInTool.dateToWeek(num))) >= 0) {//对比排班应打卡时间 + String[] ycqtst = new String[ycqts.length + zj]; + System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length); + ycqtst[w] = num; + ycqts = ycqtst; + + //ycqts[w] = num; + w++; + zjgzts++; + }else { + String[] xxtst = new String[xxts.length + zj]; + System.arraycopy(xxts, 0, xxtst, 0, xxts.length); + xxtst[x] = num; + xxts = xxtst; + + //xxts[x] = num; + x++; + } + if(Arrays.binarySearch(bxdkss, num) >= 0) {//检查是否存在 必须打卡名单中 + String[] ycqtst = new String[ycqts.length + zj]; + System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length); + ycqtst[w] = num; + ycqts = ycqtst; + + //ycqts[w] = num; + w++; + zjgzts++; + xxts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(xxts), num);//为必须上班的话从休息日期中去除 + } + if(Arrays.binarySearch(appmaps, num) >= 0) {//检查是否存在 无需打卡名单中 + ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除 + zjgzts = zjgzts - 1; + + String[] xxtst = new String[xxts.length + zj]; + System.arraycopy(xxts, 0, xxtst, 0, xxts.length); + xxtst[x] = num; + + //xxts[x] = num; + xxts = xxtst; + x++; + } + } + }else if(attgro.getPbfs() == 2){ //自由排班 + DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); + List<Schedule> ycqs = schedulemapper.getAttendanceShouldList(user.getEmpnum(),startDate,endDate); + int xiuxi = 0,shangban = 0,z=0; + String[] ziyoupb = new String[ycqs.size()]; + for(Schedule sc : ycqs){ + String data = new SimpleDateFormat("yyyy-MM-dd").format(df.parse(String.valueOf(sc.getData())));// 获得格式化后的日期字符串 + ziyoupb[z] = data; + z++; + if(sc.getBcid().equals(0)){ + xiuxi++; + }else{ + shangban++; + } + } + daysOff = xiuxi; + daysOnDuty = shangban; + //目前为止应出勤天数 + int y = 0,x=0; + for(String num : range) { + if(Arrays.binarySearch(ziyoupb, num) >= 0) { + KqglAssoPbmx pbx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId())); + if(pbx!=null && pbx.getBcid()!=0) { + ycqts[y] = num; + y++; + zjgzts++; + }else { + xxts[x] = num; + x++; + } + } + } + }else{ + List<AttendanceWeeklySch> atwek = attendanceweeklyschmapper.selectAttendanceMadeByUserid(user.getEmpnum(),org_code); + String[] week= new String[atwek.size()]; + int e = 0; + String[] ziyoupb = new String[atwek.size()]; + for(AttendanceWeeklySch awek : atwek){ + week[e] = awek.getWekmc(); + ziyoupb[e] = String.valueOf(awek.getType()); + e++; + } + String yemo = year + "-" + month; + sdf1.setLenient(false); + int y = 0; + for(int i = 1; i <= ClockInTool.getDaysByYearMonth(year,month); i++){ + Date date1 = sdf1.parse(yemo + "-" + i); + for(int u=0;u<week.length;u++){ + if(sdf2.format(date1).equals(week[u])){ + y++; + } + } + } + int xiuxi = ClockInTool.getDaysByYearMonth(year,month) - y; + daysOff = xiuxi; + daysOnDuty = y; + //目前为止应出勤天数 + int g = 0,x=0; + for(String num : range) { + if(Arrays.binarySearch(ziyoupb, String.valueOf(ClockInTool.dateToWeek(num))) >= 0) {//对比排班应打卡时间 + ycqts[g] = num; + g++; + zjgzts++; + }else { + xxts[x] = num; + x++; + } + } + } + List<PunchRecord> initial = punchrecordmapper.getMaintenancePunchCardList(startDate,endDateyesterday,user.getEmpnum()); +// // 迟到次数 迟到时长 早退次数 早退时长 +// int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数 + String[] cdts = new String[31];//迟到的具体天数 + String[] ztts = new String[31];//早退的具体天数 + if(initial.size() > 0){ + for(PunchRecord prd : initial){ + if(prd.getType() == 1 && prd.getResults() > 0){ + cdts[latenum] = new SimpleDateFormat("yyyy-MM-dd").format(prd.getDktime()); + latenum++; + latehours += prd.getResults(); + } + if(prd.getType() == 2 && prd.getResults() > 0){ + ztts[leanum] = new SimpleDateFormat("yyyy-MM-dd").format(prd.getDktime()); + leanum++; + leahours += prd.getResults(); + } + } + } + AttSubsidiaryDto subs = kqglassodkmxmapper.subsidiary(user.getEmpnum(), ttstr); +// //工作时长(分钟)、严重迟到次数、严重迟到时长(分钟)、旷工迟到次数 +// double workinghours = 0,seriouslatetimes = 0,seriouslatehours = 0,absenlatetimes = 0; + if(subs != null) { + workinghours = subs.getGzsctotalgzsc(); + seriouslatetimes = subs.getYzcdcstotal(); + seriouslatehours = subs.getYzcdsctotal(); + absenlatetimes = subs.getKgcdfzstotal(); + } + //具体请假天数 + List<KqglAssoRelationSummary> leavetotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 2, ttstr); + String[] leaves = new String[leavetotal.size()]; + int l = 0; + if(leavetotal.size()>0) { + for(KqglAssoRelationSummary lea : leavetotal){ + leaves[l] = lea.getAppTime(); + l++; + } + } + //具体加班天数 + List<KqglAssoRelationSummary> overtitotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 1, ttstr); + String[] overtimes = new String[overtitotal.size()]; + int o = 0; + if(overtitotal.size() > 0) { + for(KqglAssoRelationSummary over : overtitotal) { + overtimes[o] = over.getAppTime(); + o++; + } + } + //具体出差天数 + List<KqglAssoRelationSummary> trtotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 3, ttstr); + String[] travels = new String[trtotal.size()]; + int cx = 0; + if(trtotal.size()>0) { + for(KqglAssoRelationSummary trt : trtotal) { + travels[cx] = trt.getAppTime(); + cx++; + } + } + //具体外出天数 + List<KqglAssoRelationSummary> goouttotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 4, ttstr); + String[] goouts = new String[goouttotal.size()]; + int wc = 0; + if(goouttotal.size()>0) { + for(KqglAssoRelationSummary go:goouttotal) { + goouts[wc] = go.getAppTime(); + wc++; + } + } + //具体补卡天数 + List<KqglAssoRelationSummary> cardtotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 5, ttstr); + String[] cards = new String[cardtotal.size()]; + int bk = 0; + if(cardtotal.size()>0) { + for(KqglAssoRelationSummary car : cardtotal) { + cards[bk] = car.getAppTime(); + bk++; + } + } + + //排查请假是否在最后一次打卡范围内 查询当月的请假所有日期 + List<KqglAssoRelationSummary> leainv = kqglassorelationsummarymapper.LeaveInvestigation(user.getEmpnum(), 2, ttstr,org_code); +// KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); + String beginTime = sdf1.format(new Date()); +// List<String> rowData = new ArrayList<String>(); + //遍历目前为止所有日期 结合该用户发起的审批进行结合 + //1:加班 2:请假 3:出差 4:外出 5:补卡 + for(String num : range) { + if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xxts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(dkjtts),num) >= 0) { + rowData.add("休息并打卡"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xxts), num) >= 0){ + rowData.add("休息"); + }else { + if(Arrays.binarySearch(ClockInTool.deleteArrayNull(ycqts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(dkjtts), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(leaves), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(travels), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(goouts), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(cards), num) < 0) { + rowData.add("旷工"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(ycqts), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(xxts), num) < 0) {//日期不在上班也不在休息里面即为未排班 + rowData.add("未排班"); + }else if(sdf1.parse(beginTime).getTime() < sdf1.parse(num).getTime()) { + rowData.add("未到班期"); + }else { + if(Arrays.binarySearch(ClockInTool.deleteArrayNull(sblacks), num) >= 0) { + rowData.add("上班缺卡"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(sblacks), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(ztts), num) >= 0) { + rowData.add("上班缺卡,下班早退"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(cdts), num) >= 0) { + rowData.add("上班迟到"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(cdts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) { + rowData.add("上班迟到,下班缺卡"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(cdts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(ztts), num) >= 0) { + rowData.add("上班迟到,下班早退"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) { + rowData.add("下班缺卡"); + }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(ztts), num) >= 0) { + rowData.add("下班早退"); + }else { + rowData.add("正常"); + } + } + } + + if(ClockInTool.contains(ClockInTool.deleteArrayNull(leaves),num)) { + KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 2)); + String leavetype = "未知";//请假类型 + String company = "未知";//请假单位 + if(lea != null) { + KqglAssoLeaveRules rul = KqglAssoLeaveRules.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveRules>().lambda().eq(KqglAssoLeaveRules::getId, lea.getLeaveTypeId())); + if(rul != null) { + leavetype = rul.getName(); + //1:按天请假;2:按半天;3:按小时 + if(rul.getCompany() == 1) { company = "天"; } + else if(rul.getCompany() == 2) { company = "半天"; } + else { company = "小时"; } + } + } + rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"请"+leavetype+lea.getDuration()+company); + } + if(ClockInTool.contains(ClockInTool.deleteArrayNull(travels),num)) { + KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 3)); + rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"出差"+lea.getDuration()+"天"); + } + if(ClockInTool.contains(ClockInTool.deleteArrayNull(goouts),num)) { + KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 4)); + rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"外出"+lea.getDuration()+"天"); + } + if(ClockInTool.contains(ClockInTool.deleteArrayNull(cards),num)) { + KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 5)); + rowData.add("已补卡:"+lea.getStartTime()); + } + if(ClockInTool.contains(ClockInTool.deleteArrayNull(overtimes),num)) { + + String company = "未知",method = "无";//加班单位、加班补偿方式 + + List<KqglAssoRelationSummary> leas = KqglAssoRelationSummary.builder().build().selectList(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 1)); + for(KqglAssoRelationSummary lea : leas) { + + //最小加班单位 1:按分钟加班、2:按半小时加班、3:按小时加班、4:按半天加班、5:按天加班 + KqglAssoOvertimeBasics basics = KqglAssoOvertimeBasics.builder().build().selectOne(new QueryWrapper<KqglAssoOvertimeBasics>().lambda().eq(KqglAssoOvertimeBasics::getOrgCode, org_code)); + if(basics.getMinimumUnit() == 1) { company = "分钟"; } + else if(basics.getMinimumUnit() == 2) { company = "半小时";} + else if(basics.getMinimumUnit() == 3) { company = "小时";} + else if(basics.getMinimumUnit() == 4) { company = "半天";} + else if(basics.getMinimumUnit() == 5) { company = "天";} + //1:转调休;2:转加班费;3:转调休或加班费 + if(lea.getCompensateId() == 1) { method="转调休"; } + else if(lea.getCompensateId() == 2) { method="转加班费"; } + else {method="转调休或加班费";} + rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"加班"+lea.getDuration()+company+"["+method+"]"); + //防止多运算 + if(lea.getOrdernum() == lea.getTotals()) { + //加班补偿方式 1:转调休;2:转加班费;3:转调休或加班费 + //工作日 + if(ClockInTool.contains(ClockInTool.deleteArrayNull(ycqts),num)) { + if(lea.getOvertimeTypeId() == 1) { + if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) { + workingturncompenleave = workingturncompenleave + lea.getDuration(); + }else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) { + workingtransferovertime = workingtransferovertime + + lea.getDuration(); + } + } + } + //休息日 + if(ClockInTool.contains(ClockInTool.deleteArrayNull(xxts),num)) { + if(lea.getOvertimeTypeId() == 2) { + if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) { + restturncompenleave = restturncompenleave + lea.getDuration(); + }else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) { + resttransferovertime = resttransferovertime + lea.getDuration(); + } + } + } + if(!ClockInTool.contains(ClockInTool.deleteArrayNull(ycqts),num) && !ClockInTool.contains(ClockInTool.deleteArrayNull(xxts),num)) { + if(lea.getOvertimeTypeId() == 3) { + if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) { +// holidayturncompenleave++; + holidayturncompenleave = holidayturncompenleave + lea.getDuration(); + }else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) { +// holidaytransferovertime++; + holidaytransferovertime = holidaytransferovertime + lea.getDuration(); + } + } + } + } + } + + } + + //////// + + KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); + + if(attgro.getPbfs() == 1){ + int several = Integer.valueOf(ClockInTool.dateToWeek(num));// + KqglAssoTeshu tesu = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId()).eq(KqglAssoTeshu::getTsrq, num)); + if(tesu == null) { + //获取该员工最新班次 + KqglAssoZhoupaiban gudingpb = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId()) + .eq(KqglAssoZhoupaiban::getType, several)); + if(gudingpb!=null) { + shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, gudingpb.getBcid())); + } + }else { + if(tesu.getBcid() > 0) { + shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, tesu.getBcid())); + } + + } + //获取该员工最新班次 + KqglAssoZhoupaiban gudingpb = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId()) + .eq(KqglAssoZhoupaiban::getType, several)); + if(gudingpb != null) { + shif = KqglAssoBcsz.builder().build(); + shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, gudingpb.getBcid())); + } + }else if(attgro.getPbfs() == 2){ + KqglAssoPbmx pbmxx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId())); + if(pbmxx != null && pbmxx.getBcid() != 0) { + shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, pbmxx.getBcid())); + } + } + + if(shif != null && shif.getSxbcs() != null) { + System.out.println(shif.getSxbcs()); + answer = shif.getSxbcs();//1=2次 2=4次 3=6次 + //未打最后一次卡的时候 判断最后一次打卡时间是否在请假范围内 相对应减少下班缺卡次数 + //最后一次应打卡时间 + String latimeclock = ""; + if(answer == 1) { + latimeclock = num +" "+ shif.getXbdk1();//ClockInTool.dealDateFormat(shif.getXbdk1(),3); + }else if(answer == 2) { + latimeclock = num +" "+ shif.getXbdk2();//ClockInTool.dealDateFormat(shif.getXbdk2(),3); + }else { + latimeclock = num +" "+ shif.getXbdk3();//ClockInTool.dealDateFormat(shif.getXbdk3(),3); + } + for(KqglAssoRelationSummary learel:leainv) { + boolean adopt = ClockInTool.hourMinuteBetween(latimeclock, learel.getStartTime().substring(0, 16), learel.getEndTime().substring(0, 16),"yyyy-MM-dd HH:mm"); + if(adopt) { + xbqkcs = xbqkcs-1; + } + } + } + } + }else { + for (String num2 : range) { + if (Arrays.binarySearch(dkjtts, num2) >= 0) { + rowData.add("未排班并打卡"); + }else{ + rowData.add("未排班"); + } + } + System.err.print("该员工未加入考勤组"); + } + + String[] range1=ClockInTool.listToString(rowData).split(";"); + String[] noticesArray=range1[0].split(","); + noticesArray = ClockInTool.arrycopy(noticesArray); + for(int ct=noticesArray.length-1;ct<31;ct++) { + noticesArray[ct] = ""; + if(ct<30) { + noticesArray = ClockInTool.arrycopy(noticesArray); + } + } + String department = "",position=""; + if(user.getDepartment() != null) { + department = user.getDepartment(); + } + if(user.getPosition() != null) { + position = user.getPosition(); + } + + + + KqglAssoMonthPunchSummary summary = KqglAssoMonthPunchSummary.builder().name(user.getEmpname()).num(user.getEmpnum()).dept(department) + .post(position).attGroup(attgroid).shift(answer).build(); + summary.setDaysOnDuty(daysOnDuty);//应出勤天数 + summary.setActualAttDays(Double.valueOf(dkjl));//实际出勤天数 + summary.setDaysOff(daysOff);//休息天数 + summary.setWorkingHours(workinghours); + summary.setLateTimes(Double.valueOf(latenum));//迟到次数 + summary.setLateHours(Double.valueOf(latehours));//迟到时长(分钟) + summary.setSeriousLateTimes(seriouslatetimes);//严重迟到次数 + summary.setSeriousLateHours(seriouslatehours);//严重迟到时长(分钟) + summary.setAbsenLateTimes(absenlatetimes);//旷工迟到次数 + summary.setEarlyLeaveTimes(Double.valueOf(leanum));//早退次数 + summary.setLengthEarlyLeave(Double.valueOf(leahours));//早退时长(分钟) + summary.setNumberWorkCardShortage(Double.valueOf(sbqkcs));//上班缺卡次数 + summary.setNumberDutyCardShortage(Double.valueOf(xbqkcs < 0 ? 0 : xbqkcs));//下班缺卡次数 + summary.setLengthBusinessTrip(traveltotal);//出差时长 + summary.setTimeOut(egresstotal);//外出时长 + summary.setTotalOvertimeHours(overtimetotal);//加班总时长 + summary.setBelongYear(ca.get(Calendar.YEAR)); + summary.setBelongMonth(ca.get(Calendar.MONTH)+1); + summary.setOrgCode(org_code); + summary.setLastModified(new Date().getTime()); + + int absenteeismdays=0; + if(zjgzts-dkjl > 0) { absenteeismdays = zjgzts-dkjl; } + summary.setAbsenteeismDays(Double.valueOf(absenteeismdays));//旷工天数 + + summary.setWorkingTurnCompenLeave(workingturncompenleave);//工作日(转调休) + summary.setRestTurnCompenLeave(restturncompenleave);//休息日(转调休) + summary.setHolidayTurnCompenLeave(holidayturncompenleave);//节假日(转调休) + summary.setWorkingTransferOvertime(workingtransferovertime);//工作日(转加班费) + summary.setRestTransferOvertime(resttransferovertime);//休息日(转加班费) + summary.setHolidayTransferOvertime(holidaytransferovertime);//节假日(转加班费) + summary.setDay1(noticesArray[0]); + summary.setDay2(noticesArray[1]); + summary.setDay3(noticesArray[2]); + summary.setDay4(noticesArray[3]); + summary.setDay5(noticesArray[4]); + summary.setDay6(noticesArray[5]); + summary.setDay7(noticesArray[6]); + summary.setDay8(noticesArray[7]); + summary.setDay9(noticesArray[8]); + summary.setDay10(noticesArray[9]); + summary.setDay11(noticesArray[10]); + summary.setDay12(noticesArray[11]); + summary.setDay13(noticesArray[12]); + summary.setDay14(noticesArray[13]); + summary.setDay15(noticesArray[14]); + summary.setDay16(noticesArray[15]); + summary.setDay17(noticesArray[16]); + summary.setDay18(noticesArray[17]); + summary.setDay19(noticesArray[18]); + summary.setDay20(noticesArray[19]); + summary.setDay21(noticesArray[20]); + summary.setDay22(noticesArray[21]); + summary.setDay23(noticesArray[22]); + summary.setDay24(noticesArray[23]); + summary.setDay25(noticesArray[24]); + summary.setDay26(noticesArray[25]); + summary.setDay27(noticesArray[26]); + summary.setDay28(noticesArray[27]); + summary.setDay29(noticesArray[28]); + summary.setDay30(noticesArray[29]); + summary.setDay31(noticesArray[30]); + + if(summaryid > 0) { + summary.setId(summaryid); + } + summary.insertOrUpdate(); + } + + } + + +} diff --git a/src/main/java/cn/timer/api/controller/yggl/YgglController.java b/src/main/java/cn/timer/api/controller/yggl/YgglController.java index 21b7a1f..f6f1104 100644 --- a/src/main/java/cn/timer/api/controller/yggl/YgglController.java +++ b/src/main/java/cn/timer/api/controller/yggl/YgglController.java @@ -6,6 +6,7 @@ package cn.timer.api.controller.yggl; import java.io.IOException; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; @@ -90,6 +91,7 @@ import cn.timer.api.config.enums.SysRoleType; import cn.timer.api.config.exception.Regular; import cn.timer.api.config.validation.ValidList; import cn.timer.api.controller.kqgl.ClockInTool; +import cn.timer.api.controller.kqgl.atttimer.RealTimeUpdate; import cn.timer.api.controller.zzgl.service.ZzglBmgwMService; import cn.timer.api.dao.clazz.CommonAreaMapper; import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper; @@ -222,6 +224,9 @@ public class YgglController { return ResultUtil.data(bmgw); } + + @Autowired + private RealTimeUpdate realtimeupdate; /** * 添加员工档案 * @@ -320,6 +325,11 @@ public class YgglController { } + try { + realtimeupdate.AttendanceTask(userBean.getOrgCode(), ygglMainEmp.getEmpNum(), 2,null); + } catch (ParseException e) { + e.printStackTrace(); + } return ResultUtil.data(ygglMainEmp, "添加员工成功!"); } else { diff --git a/src/main/java/cn/timer/api/dao/kqmk/KqglAssoLeaveBalanceMapper.java b/src/main/java/cn/timer/api/dao/kqmk/KqglAssoLeaveBalanceMapper.java index 32c423e..9714a44 100644 --- a/src/main/java/cn/timer/api/dao/kqmk/KqglAssoLeaveBalanceMapper.java +++ b/src/main/java/cn/timer/api/dao/kqmk/KqglAssoLeaveBalanceMapper.java @@ -31,4 +31,8 @@ public interface KqglAssoLeaveBalanceMapper extends BaseMapper<KqglAssoLeaveBala // JiaqibalanceDto selectleavebalanceList(int leaverulesid,int userid); Double Sumbalancedays(int userid,int orgcode,int leaverulesid); + + List<AdditionalDto> RealTimeUpdate(int orgcode,int kqzid); + + List<AdditionalDto> selectAdditionalByempnum(int orgcode,int empnum); } diff --git a/src/main/resources/mapping/kqmk/KqglAssoLeaveBalanceMapper.xml b/src/main/resources/mapping/kqmk/KqglAssoLeaveBalanceMapper.xml index 8126bf8..e02dcd8 100644 --- a/src/main/resources/mapping/kqmk/KqglAssoLeaveBalanceMapper.xml +++ b/src/main/resources/mapping/kqmk/KqglAssoLeaveBalanceMapper.xml @@ -136,6 +136,35 @@ and emp.job_status != 3 </select> + <select id="RealTimeUpdate" resultMap="AdditionalMap"> + SELECT emp.emp_num as empnum, + emp.`name` as empname, + emp.phone, + IFNULL(c.name,null) as department, + IFNULL(gw.`name`,null) as position + from yggl_main_emp emp + LEFT JOIN kqgl_asso_yhkqz as yhkqz on yhkqz.userid = emp.emp_num + LEFT JOIN zzgl_bmgw_m as gw on gw.id = emp.bmgw_id + LEFT JOIN zzgl_bmgw_m as c ON c.id = gw.up_id + where emp.org_code = #{orgcode} + and yhkqz.kqzid = #{kqzid} + and emp.job_status != 3; + </select> + + <select id="selectAdditionalByempnum" resultMap="AdditionalMap"> + SELECT emp.emp_num as empnum, + emp.`name` as empname, + emp.phone, + IFNULL(c.name,null) as department, + IFNULL(gw.`name`,null) as position + from yggl_main_emp emp + LEFT JOIN zzgl_bmgw_m as gw on gw.id = emp.bmgw_id + LEFT JOIN zzgl_bmgw_m as c ON c.id = gw.up_id + where emp.org_code = #{orgcode} + and emp.job_status != 3 + and emp.emp_num = #{empnum} + </select> + <!-- <select id="selectleavebalanceList" resultMap="JiaqibalanceMap"> select bal.userid,SUM(bal.balance_days) as balancedays