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