ClockInController.java 29.9 KB
Newer Older
ilal committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
package cn.timer.api.controller.kqgl;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;

import cn.hutool.json.JSONObject;
import cn.timer.api.bean.kqmk.KqglAssoBcsz;
import cn.timer.api.bean.kqmk.KqglAssoDkjl;
import cn.timer.api.bean.kqmk.KqglAssoDkmx;
import cn.timer.api.bean.kqmk.KqglAssoKqj;
import cn.timer.api.bean.kqmk.KqglAssoKqzdkfs;
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.bean.yggl.YgglMainEmp;
import cn.timer.api.config.exception.CustomException;
lal committed
31
import cn.timer.api.dao.kqmk.KqglAssoDkmxMapper;
ilal committed
32 33 34 35 36 37 38 39 40 41 42 43 44
import cn.timer.api.dao.kqmk.KqglAssoPbmxMapper;
import cn.timer.api.dao.kqmk.KqglMainKqzMapper;
import cn.timer.api.dto.kqmk.AttLateLate;
import cn.timer.api.dto.kqmk.AttSchedule;
import cn.timer.api.dto.kqmk.AttendanceCardListDto;
import cn.timer.api.dto.kqmk.ClockCollectData;
import cn.timer.api.dto.kqmk.KqglAssoPbmxDto;
import cn.timer.api.utils.DateUtil;
import cn.timer.api.utils.Result;
import cn.timer.api.utils.ResultUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

ilal committed
45
@Api(tags = "3.0[3]考勤打卡")
ilal committed
46 47 48 49 50 51
@RestController
@Transactional
@RequestMapping(value = "/kqdk", produces = { "application/json", "multipart/form-data" })
public class ClockInController {
	@Autowired
	private KqglMainKqzMapper kqglmainkqzmapper;
lal committed
52
	
lal committed
53 54 55 56
	//打卡明细表
	@Autowired
	private KqglAssoDkmxMapper kqglassodkmxmapper;
	
lal committed
57 58 59
	
	SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
	SimpleDateFormat sdf2 = new SimpleDateFormat("EEE");
ilal committed
60 61 62 63 64 65 66 67 68 69 70 71
	/**
	 * 考勤打卡
	 * 
	 * @param json dev_id : 考勤机id user_id : 打卡用户id verify_mode : 打卡方式(1:指纹、20:人脸)
	 *             io_time : 打卡时间
	 * @return
	 */
	@PostMapping(value = "/punchclock")
	@ApiOperation(value = "1:考勤机打卡", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 1)
	public Result<Object> punchclock(@RequestParam String json) throws Exception {
		JSONObject jsonArray = new JSONObject(json);
lal committed
72 73 74 75
		String asDevId = jsonArray.get("dev_id").toString();//考勤机编码
		String asUserId = jsonArray.get("user_id").toString();//打卡用户id
		String asVerifyMode = jsonArray.get("verify_mode").toString();//考勤机打卡方式(1:指纹;20:人脸;40:掌纹;60:密码(猜的^v^))
		String sStdIoTime = jsonArray.get("io_time").toString();//打卡时间
lal committed
76
		
ilal committed
77 78 79 80 81 82
		KqglAssoKqj kqjdev = KqglAssoKqj.builder().build().selectOne(new QueryWrapper<KqglAssoKqj>().lambda().eq(KqglAssoKqj::getCode, asDevId));
		if (kqjdev == null) 
			return ResultUtil.error("考勤机不存在!");
//		YgglMainEmp user = new LambdaQueryChainWrapper<YgglMainEmp>(ygglmainempmapper).eq(YgglMainEmp::getEmpNum, asUserId).eq(YgglMainEmp::getOrgCode, kqjdev.getQyid()).one();
		YgglMainEmp user = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, asUserId).eq(YgglMainEmp::getOrgCode, kqjdev.getQyid()));
		if(user != null) {
lal committed
83 84
			int qyid = user.getOrgCode();
			int userid = user.getEmpNum();
ilal committed
85 86 87 88 89 90 91 92 93 94 95 96 97
			KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(userid,qyid); //考勤组信息
			//pbfs;// 排班方式 1:固定排班;2:自由排班;3:自由工时
			if(attgro != null) {
				List<KqglAssoKqzdkfs> kqjs = KqglAssoKqzdkfs.builder().build().selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getKqzId, attgro.getId()));
				if(kqjs.size() > 0) {
					long time_ = DateUtil.getStringTime(sStdIoTime, "yyyy-MM-dd HH:mm:ss");
					String putime = new SimpleDateFormat("yyyy-MM-dd").format(time_);//转换打卡时间格式
					//打卡当天开始时间,打卡当天结束时间
					Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(putime,"yyyy-MM-dd")).getTime();
					Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(putime,"yyyy-MM-dd")).getTime();
					int dkmx = 0;
					//查询打卡当天是否有记录
					KqglAssoDkmx dkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, userid)
lal committed
98
							.ge(KqglAssoDkmx::getDksj, startDate).le(KqglAssoDkmx::getDksj, endDate));
ilal committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
					AttendanceCardListDto attdate = MethodCall(qyid,userid,putime);
					ClockCollectData clockt = new ClockCollectData();
					long starttime1 = 0,starttime1ks = 0,starttime1js = 0,endtime1 = 0,endtime1ks = 0,endtime1js = 0,starttime2 = 0,starttime2ks = 0,starttime2js = 0,endtime2 = 0,endtime2ks = 0,endtime2js = 0,starttime3 = 0,starttime3ks = 0,starttime3js = 0,
								endtime3 = 0,endtime3ks = 0,endtime3js = 0; 
					if(attdate.getAttsch().size() > 0) {
						 List<AttSchedule> ash = attdate.getAttsch();
						 int y = 0;
						 clockt.setShifid(ash.get(y).getId());
						 if(attdate.getAttsch().size() == 2 || attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) {
							 starttime1 = ash.get(0).getTime();starttime1ks = ash.get(0).getStarttime();starttime1js = ash.get(0).getEndtime();
							 endtime1 = ash.get(1).getTime();endtime1ks = ash.get(1).getStarttime();endtime1js = ash.get(1).getEndtime();
						 }
					 	if(attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) {
					 		starttime2 = ash.get(2).getTime();starttime2ks = ash.get(2).getStarttime();starttime2js = ash.get(2).getEndtime();
						    endtime2 = ash.get(3).getTime();endtime2ks = ash.get(3).getStarttime();endtime2js = ash.get(3).getEndtime();
						}
					 	if(attdate.getAttsch().size() == 6) {
					 		starttime3 = ash.get(4).getTime();starttime3ks = ash.get(4).getStarttime();starttime3js = ash.get(4).getEndtime();
							endtime3 = ash.get(5).getTime();endtime3ks = ash.get(5).getStarttime();endtime3js = ash.get(5).getEndtime();
						 }
					 }
					 long punchcardtime,punchstart,punchend = 0;//应打卡时间,应打卡开始时间,应打卡结束时间
					 int atttype = 0;
					 if(dkmc == null) {//上班1   ****新增
						 punchcardtime = starttime1;
						 punchstart = starttime1ks;
				    	 punchend = starttime1js;
						 atttype = 1;
					 }else {
						 if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() == null)){	//下班1
							 punchcardtime = endtime1;punchstart = endtime1ks;punchend = endtime1js;atttype = 2;
					     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
					    		 && (("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() == null)){	//上班2
					    	 punchcardtime = starttime2;punchstart = starttime2ks;punchend = starttime2js;atttype = 3;
					     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
					    		 && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() == null)){	//下班2
					    	 punchcardtime = endtime2;punchstart = endtime2ks;punchend = endtime2js;atttype = 4;
					     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
					    		 && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null)
					    		 && (("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() == null)){	//上班3
					    	 punchcardtime = starttime3;punchstart = starttime3ks;punchend = starttime3js;atttype = 5;
					     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
					    		 && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null)
					    		 && (!("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() != null) && (("").equals(dkmc.getXbdk3()) || dkmc.getXbdk3() == null)){	//下班3
					    	 punchcardtime = endtime3;punchstart = endtime3ks;punchend = endtime3js;atttype = 6;
					     }else {
					    	 punchcardtime = 0;punchstart = 0;punchend = 0;atttype = 7;
					     }
					 }
					 KqglAssoBcsz shif = KqglAssoBcsz.builder().build();
					 if(attdate.getAttsch().size() > 0 && clockt.getShifid() > 0){//有无班次
						 shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, clockt.getShifid()));
					 }
					 
					//打卡记录录入 -- 打卡是否有时间范围限制
					boolean isRange = true;
					if(punchstart>0 && punchend>0) {
						 String staputime = new SimpleDateFormat("HH:mm").format(punchstart);//应打卡开始时间
						 String entputime = new SimpleDateFormat("HH:mm").format(punchend);//应打卡结束时间
						 String DKputime = new SimpleDateFormat("HH:mm").format(time_);//打卡时间
lal committed
159
						 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime,"HH:mm");
ilal committed
160 161 162 163 164 165 166 167
						 if (!effectiveDate) {
							 System.out.println("当前打卡时间不在范围内");
							// 手动抛出异常
							 isRange = false;
//							throw new Exception();
						 }
					 }
					if(isRange) {
lal committed
168 169
						int yzcd = shif.getYzcdfzs();//严重迟到分钟数
						int kgcdfzs  = shif.getKgcdfzs();//旷工迟到分钟数 
ilal committed
170
						 if(dkmc == null) {//上班1   ****新增
lal committed
171
							 int sbdk1jg = 0,yzcdsc = 0,yzcdcs = 0,kgcdcs = 0;
ilal committed
172 173 174 175 176 177
							 if(punchcardtime != 0){//有应打卡时间时
								 Long time = (time_ - punchcardtime)/1000/60;
								 if(time > 0){sbdk1jg = Math.abs(Integer.valueOf(time.toString()));}//上班1打卡结果
							 }
							 int ydkcs = 0;
							 if(shif != null){ydkcs = shif.getSxbcs()*2;}//应打卡次数
lal committed
178 179 180 181 182 183
							 if(sbdk1jg > yzcd) {
								 yzcdcs++;
								 yzcdsc = sbdk1jg - yzcd;
							 }
							 if(sbdk1jg > kgcdfzs) {kgcdcs++;}
							 KqglAssoDkmx pcd = KqglAssoDkmx.builder().userid(userid).data(putime).sbdk1(time_).sbdk1jg(sbdk1jg).ydkcs(ydkcs).qyid(qyid).dksj(startDate).yzcdcs(yzcdcs).yzcdsc(Double.valueOf(yzcdsc)).kgcdfzs(kgcdcs).build();
ilal committed
184 185 186 187 188 189
							 if (!pcd.insert()) {
								throw new CustomException("打卡明细-新增异常-1");
							 }
							 dkmx = pcd.getId();
						 }else { //*****修改
							 dkmx = dkmc.getId();
lal committed
190 191
							 KqglAssoDkmx pcd = KqglAssoDkmx.builder().build();
							 
ilal committed
192
							 if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() == null)){//下班1
lal committed
193 194
								 pcd.setId(dkmc.getId());
								 pcd.setXbdk1(time_);//下班1打卡时间
ilal committed
195 196
								 if(punchcardtime != 0){//有应打卡时间时
									 Long time = (time_ - punchcardtime)/1000/60;
lal committed
197 198 199 200 201
									 if(time > 0){
										 pcd.setXbdk1jg(0);// 打卡结果
									 }else{
										 pcd.setXbdk1jg(Math.abs(Integer.valueOf(time.toString())));//上班1打卡结果
									 }
ilal committed
202
								 }
lal committed
203
								 
ilal committed
204 205
								 if(dkmc.getSbdk1() != null){
									Long time = (time_ - dkmc.getSbdk1())/1000/60;
lal committed
206
									pcd.setGzsc(Math.abs(Double.valueOf(time.toString())));//只打一次卡时计算工作时长
ilal committed
207
								 }
lal committed
208
								 kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录
lal committed
209
								 
ilal committed
210 211
						     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
						    		 && (("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() == null)){//上班2
lal committed
212
						    	 
lal committed
213
						    	 int sbdk2jg = 0,yzcdsc = 0,yzcdcs = 0,kgcdcs = 0;
ilal committed
214 215 216 217
								 if(punchcardtime != 0){//有应打卡时间时
									 Long time = (time_ - punchcardtime)/1000/60;
									 if(time > 0){sbdk2jg = Math.abs(Integer.valueOf(time.toString()));}
								 }
lal committed
218 219 220 221 222
								 if(sbdk2jg > yzcd) {
									 yzcdcs = dkmc.getYzcdcs()+1;
									 yzcdsc = sbdk2jg - yzcd;
								 }
								 if(sbdk2jg > kgcdfzs) {kgcdcs++;}
lal committed
223 224 225 226 227 228 229 230 231 232
								 
								 pcd.setId(dkmc.getId());
						    	 pcd.setSbdk2(time_);//上班1打卡时间
								 pcd.setSbdk2jg(sbdk2jg);
								 pcd.setYzcdcs(yzcdcs);
								 pcd.setYzcdsc(Double.valueOf(yzcdsc));
								 pcd.setKgcdfzs(kgcdcs);
								 
								 kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录
								 
ilal committed
233 234
						     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
						    		 && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() == null)){//下班2
lal committed
235 236 237
								 
								 pcd.setId(dkmc.getId());
						    	 pcd.setXbdk2(time_);//下班1打卡时间
ilal committed
238 239
								 if(punchcardtime != 0){//有应打卡时间时
									 Long time = (time_ - punchcardtime)/1000/60;
lal committed
240 241 242 243 244
									 if(time > 0){
										 pcd.setXbdk2jg(0);// 打卡结果
									 }else{
										 pcd.setXbdk2jg(Math.abs(Integer.valueOf(time.toString())));
									 }
ilal committed
245
								 }
lal committed
246
								 
ilal committed
247 248 249 250 251
								//班次为4次时,计算工作时长
								 if(dkmc.getSbdk2() != null){
									 Long time = (time_ - dkmc.getSbdk2())/1000/60;
									 BigDecimal om = new BigDecimal(dkmc.getGzsc());
									 BigDecimal on = new BigDecimal(time);
lal committed
252 253
									 double worktime = Math.abs(om.add(on).doubleValue());
									 pcd.setGzsc(worktime);
ilal committed
254
								 }
lal committed
255 256
								 kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录
								 
ilal committed
257 258 259
						     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
						    		 && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null)
						    		 && (("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() == null)){//上班3
lal committed
260
						    	 
lal committed
261
						    	 int sbdk3jg = 0,yzcdsc = 0,yzcdcs = 0,kgcdcs = 0;
ilal committed
262 263 264 265
								 if(punchcardtime != 0){//有应打卡时间时
									 Long time = (time_ - punchcardtime)/1000/60;
									 if(time > 0){sbdk3jg = Math.abs(Integer.valueOf(time.toString()));}
								 }
lal committed
266 267 268 269 270
								 if(sbdk3jg > yzcd) {
									 yzcdcs = dkmc.getYzcdcs()+1;
									 yzcdsc = sbdk3jg - yzcd;
								 }
								 if(sbdk3jg > kgcdfzs) {kgcdcs++;}
lal committed
271 272 273 274 275 276 277 278 279 280
								 
								 pcd.setId(dkmc.getId());
						    	 pcd.setSbdk3(time_);//上班1打卡时间
								 pcd.setSbdk3jg(sbdk3jg);
								 pcd.setYzcdcs(yzcdcs);
								 pcd.setYzcdsc(Double.valueOf(yzcdsc));
								 pcd.setKgcdfzs(kgcdcs);
								 
								 kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录
								 
ilal committed
281 282 283
						     }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null)
						    		 && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null)
						    		 && (!("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() != null) && (("").equals(dkmc.getXbdk3()) || dkmc.getXbdk3() == null)){//下班3
lal committed
284 285 286
						    	 
								 pcd.setId(dkmc.getId());
						    	 pcd.setXbdk3(time_);//下班1打卡时间
ilal committed
287 288
								 if(punchcardtime != 0){//有应打卡时间时
									 Long time = (time_ - punchcardtime)/1000/60;
lal committed
289 290 291 292 293
									 if(time > 0){
										 pcd.setXbdk3jg(0);// 打卡结果
									 }else{
										 pcd.setXbdk3jg(Math.abs(Integer.valueOf(time.toString())));
									 }
ilal committed
294 295 296 297 298 299
								 }
								//班次为6次时,计算工作时长
								 if(dkmc.getSbdk3() != null){
									 Long time = (time_ - dkmc.getSbdk3())/1000/60;
									 BigDecimal om = new BigDecimal(dkmc.getGzsc());//第二次
									 BigDecimal on = new BigDecimal(time);
lal committed
300 301
									 double worktime = Math.abs(om.add(on).doubleValue());
									 pcd.setGzsc(worktime);
ilal committed
302
								 }
lal committed
303
								 
ilal committed
304
						     }
lal committed
305 306
							 
							 pcd.setId(dkmc.getId());
ilal committed
307
							 if(atttype <= 6){
lal committed
308
								 int update = kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录
ilal committed
309 310
							 }
						 }
lal committed
311 312 313
						 
					 }else {
						 System.out.println("当前打卡时间不在范围内");
ilal committed
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
					 }
					
					//原始打卡记录数据录入**************************************************************************************************************************************
					int results = 0;
					Long time = (time_ - punchcardtime)/1000/60;
					if(punchcardtime != 0){
						if(isRange) {
							if((atttype)%2 > 0){//上班
								if(time > 0){results = Integer.valueOf(time.toString());}// 打卡结果
							}else{//下班
								if(time > 0){}else{results = Math.abs(Integer.valueOf(time.toString()));}// 打卡结果
							}
						}
					}
					int type,status = 0;
					if((atttype)%2 > 0){
						type = 1;// 类型(类型 0:无排班打卡 1:上班 2:下班)   punchcardtime == 0:无班次打卡
						if(punchcardtime == 0){status = 1;}else{
							if(isRange) {// 状态(0:打卡无效:此记录已被更新 1:正常 2:异常 3:迟到 4:早退 5:补卡 6:请假 7:加班 8:调休)
								if(time > 0){status = 3;}else if(results == 0){status = 1;}
							}else {status = 2;}
						}
					}else{
						type = 2;// 类型(类型 0:无排班打卡 1:上班 2:下班)
						if(punchcardtime == 0){status = 1;}else{
							if(isRange) {
								if(time < 0){status = 4;}else if(results == 0){status = 1;}
							}else {status = 2;}
						}
					}
					String attdate_ = new SimpleDateFormat("yy-MM-dd").format(Double.valueOf(startDate));//转换打卡时间格式
					long attime;
lal committed
346 347
//					if(punchcardtime == 0 && !isRange){attime = new Date().getTime();}else{attime = punchcardtime;}// 考勤时间(应打卡时间)
					if(punchcardtime == 0){attime = new Date().getTime();}else{attime = punchcardtime;}// 考勤时间(应打卡时间)
ilal committed
348
					String remarks = "";
lal committed
349
					if(("1").equals(asVerifyMode)) {remarks = "考勤机指纹打卡";}else if(("20").equals(asVerifyMode)) {remarks = "考勤机人脸打卡";}else if(("40").equals(asVerifyMode)) {remarks = "考勤机掌纹打卡";}else if(("60").equals(asVerifyMode)) {remarks = "考勤机密码打卡";}
ilal committed
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
					//cardtype--1:GPS,2:WIFI,3:考勤机
					KqglAssoDkjl pre = KqglAssoDkjl.builder().dktime(time_).results(results).userId(userid).type(type).status(status).sort(atttype)
							.cardType(3).qyid(qyid).attdate(attdate_+" "+ClockInTool.dateToWeek2(putime)).attime(attime).dkmxid(dkmx).bcid(clockt.getShifid()).remarks(remarks).punchmode(Integer.valueOf(asVerifyMode))
							.punchequipment(asDevId).build();
					
					if (!pre.insert()) {
						throw new CustomException("打卡记录-新增异常-2");
					 }
				}
			}else {
				return ResultUtil.error("打卡失败!,未加入考勤组!");
			}
		}else {
			return ResultUtil.error("打卡失败!,用户不存在!");
		}
		return  ResultUtil.data(null, "打卡成功");
	}
	
	@Autowired
	private KqglAssoPbmxMapper kqglassopbmxmapper;
	
	public AttendanceCardListDto MethodCall(int qyid,int userid,String date) throws ParseException {
		 
		AttendanceCardListDto attcar = new AttendanceCardListDto();
		 String str = null;
		 if(!("").equals(date)){
			 str = date;
		 }else{
			 Date d = new Date();
			 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			 str = sdf.format(d);
		 }
//		 Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(str,"yyyy-MM-dd")).getTime();
//	     Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(str,"yyyy-MM-dd")).getTime();
		 
	     KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(userid,qyid); //考勤组信息
	     
	     //pbfs:排班方式 1:固定排班;2:自由排班;3:自由工时
		 if(attgro != null){//判断当前用户是否加入到考勤组
			 //排班制
			 KqglAssoPbmxDto jrpb = kqglassopbmxmapper.getScheduleSpecificAttendance(attgro.getId(),userid,str);
		     //固定排班
		     int week = Integer.valueOf(ClockInTool.dateToWeek(str));//4
		     
		     KqglAssoZhoupaiban atwek = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId())
		    		 .eq(KqglAssoZhoupaiban::getType, week).ne(KqglAssoZhoupaiban::getBcid, 0));
			 
		    if(attgro.getPbfs() == 1){//固定排班
		    	if(atwek != null){//有固定周排班
		    		KqglAssoTeshu rest = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId())
		    				.eq(KqglAssoTeshu::getTsrq, str).eq(KqglAssoTeshu::getBcid, 0));
		    		if(rest != null){//今天休息  Sort返回0【特殊日期--休息】
		    			List<AttSchedule> atts = new ArrayList<AttSchedule>();
			    		AttSchedule as = AttSchedule.builder().id(0).sort(0).time(0l).starttime(0l).endtime(0l).build();
			    		atts.add(as);
			    		attcar.setAttsch(atts);
		    		}else{//今天上班
			    		KqglAssoBcsz bcz = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, atwek.getBcid()));
			    		
			    		if(bcz != null){
			    			Getshiftinformationbatch(bcz,attcar,str);
			    		}
		    		}
		    	}else{//必须打卡
		    		KqglAssoTeshu tsri = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId())
		    				.eq(KqglAssoTeshu::getTsrq, str).ne(KqglAssoTeshu::getBcid, 0));
		    		if(tsri != null){
		    			KqglAssoBcsz tsrq = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, tsri.getBcid()));
		    			if(tsrq!=null){
		    				Getshiftinformationbatch(tsrq,attcar,str);
		    			}
		    		}else{//休息
		    			List<AttSchedule> atts = new ArrayList<AttSchedule>();
			    		AttSchedule as = AttSchedule.builder().id(0).sort(0).time(0l).starttime(0l).endtime(0l).build();
			    		atts.add(as);
			    		attcar.setAttsch(atts);
		    		}
		    	}
			}else if(attgro.getPbfs() == 2){//自由排班
				//未排班时,员工可选择班次打卡
			    if(attgro.getIsXzbcdk() == 1){
			    	attcar.setOptscheduling(true);	
			    }else{
			    	attcar.setOptscheduling(false);
			    }
				if(jrpb != null){
					if(jrpb.getBcid() != 0){//有班次时("Bcid"不为0时)
						KqglAssoBcsz tsrq = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, jrpb.getBcid()));
						/**已简化**/
						Getshiftinformationbatch(tsrq,attcar,str);
					}else{//当天排班为休息
						List<AttSchedule> atts1 = new ArrayList<AttSchedule>();
			    		AttSchedule as = AttSchedule.builder().id(0).sort(0).time(0l).starttime(0l).endtime(0l).build();
			    		atts1.add(as);
			    		attcar.setAttsch(atts1);
					}
				}
			}else{//自由工时
				KqglAssoZhoupaiban wekz = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId())
						.eq(KqglAssoZhoupaiban::getBcid, 0).eq(KqglAssoZhoupaiban::getType, week));
				
				if(wekz != null){//
					String dada = str+" "+attgro.getKqkssjTime()+":00";
					attcar.setStapclotime(Long.valueOf(ClockInTool.dateToStamp(dada)));
				}
				
				if(!("").equals(attgro.getJbzdsc())){
					attcar.setCanpunchworkdate(Double.valueOf(attgro.getJbzdsc()));//上班打卡后多久大下班卡
				}
			}
		    if(jrpb != null || atwek != null){
		    	KqglAssoBcsz shif = KqglAssoBcsz.builder().build();
		    	if(attgro.getPbfs() == 1){
		    		shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, atwek.getBcid()));
		    	}else if(attgro.getPbfs() == 2){
		    		shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, jrpb.getBcid()));
		    	}
		    	
		    	if(shif != null){
		    		if(shif.getIsXbdk() == 1){
		    			attcar.setNoclockout(true);// 下班不用打卡
		    		}else{
		    			attcar.setNoclockout(false);// 下班不用打卡
		    		}
		    		attcar.setAllowlate(shif.getYxcdfzs());// 允许迟到分钟数
		    		attcar.setSeriouslate(shif.getYzcdfzs());// 严重迟到分钟数
		    		attcar.setAbsenteeismlate(shif.getKgcdfzs());// 旷工迟到分钟数
		    		if(shif.getIsWzwd() == 1){
		    			attcar.setIslatelate(true);// 晚走晚到
		    			List<AttLateLate> atwzwd = new ArrayList<AttLateLate>();
		    			int p = 0;
		    			if(!("").equals(shif.getXbwz1()) && !("").equals(shif.getSbwd1())){p = 2;}
		    			if(!("").equals(shif.getXbwz1()) && !("").equals(shif.getSbwd1()) && !("").equals(shif.getXbwz2()) && !("").equals(shif.getSbwd2())){p = 4;}
		    			if(!("").equals(shif.getXbwz1()) && !("").equals(shif.getSbwd1()) && !("").equals(shif.getXbwz2()) && !("").equals(shif.getSbwd2()) && !("").equals(shif.getXbwz3()) && !("").equals(shif.getSbwd3())){p = 6;}
		    			AttLateLate ala = AttLateLate.builder().build();
		    			ala.setLatewalk(shif.getXbwz1());
		    			ala.setArrivelate(shif.getSbwd1());
		    			atwzwd.add(ala);
		    			if(p == 4 || p == 6){
		    				AttLateLate alat = AttLateLate.builder().build();
		    				alat.setLatewalk(shif.getXbwz2());
		    				alat.setArrivelate(shif.getSbwd2());
		    				atwzwd.add(alat);
		    			}
		    			if(p == 6){
		    				AttLateLate alas = AttLateLate.builder().build();
		    				alas.setLatewalk(shif.getXbwz3());
		    				alas.setArrivelate(shif.getSbwd3());
		    				atwzwd.add(alas);
		    			}
		    			attcar.setAttlat(atwzwd);
		    		}else{
		    			attcar.setIslatelate(false);// 晚走晚到
		    		}
		    	}
		    }
		    attcar.setAttgrouptype(attgro.getPbfs());//1:固定排班;2:自由排班;3:自由工时
		 }else{
			 attcar.setAttgrouptype(0);//1:固定排班;2:自由排班;3:自由工时
		 }
		 return attcar;
	 }
	
	//
	public void Getshiftinformationbatch(KqglAssoBcsz shiftm,AttendanceCardListDto attcar,String str){
		 List<AttSchedule> atts = new ArrayList<AttSchedule>();
	    	if(shiftm.getSxbcs() == 1 || shiftm.getSxbcs() == 2 || shiftm.getSxbcs() == 3){//1次上下班
	    		for(int o=0;o<2;o++){
	    			if(o==0){
lal committed
519
			    		AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(1).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbdk1()+":00").replaceAll("\r|\n", ""))))
lal committed
520 521
			    				.starttime(("").equals(shiftm.getSbqjks1()) || shiftm.getSbqjks1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjks1()+":00").replaceAll("\r|\n", ""))))
			    				.endtime(("").equals(shiftm.getSbqjjs1()) || shiftm.getSbqjjs1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjjs1()+":00").replaceAll("\r|\n", "")))).build();
ilal committed
522 523 524
			    		
			    		atts.add(as);
	    			}else{
lal committed
525
			    		AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(2).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbdk1()+":00").replaceAll("\r|\n", ""))))
lal committed
526 527
			    				.starttime(("").equals(shiftm.getXbqjks1()) || shiftm.getXbqjks1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjks1()+":00").replaceAll("\r|\n", ""))))
			    				.endtime(("").equals(shiftm.getXbqjjs1()) || shiftm.getXbqjjs1() ==null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjjs1()+":00").replaceAll("\r|\n", "")))).build();
ilal committed
528 529 530 531 532 533 534 535
			    		atts.add(as);
	    			}
	    		}
	    		attcar.setAttsch(atts);
	    	}
	    	if(shiftm.getSxbcs() == 2 || shiftm.getSxbcs() == 3){//2次上下班
	    		for(int o=0;o<2;o++){
	    			if(o==0){
lal committed
536
			    		AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(3).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbdk2()+":00").replaceAll("\r|\n", ""))))
lal committed
537 538
			    				.starttime(("").equals(shiftm.getSbqjks2())|| shiftm.getSbqjks2()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjks2()+":00").replaceAll("\r|\n", ""))))
			    				.endtime(("").equals(shiftm.getSbqjjs2()) || shiftm.getSbqjjs2()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjjs2()+":00").replaceAll("\r|\n", "")))).build();
ilal committed
539 540
			    		atts.add(as);
	    			}else{
lal committed
541
			    		AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(4).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbdk2()+":00").replaceAll("\r|\n", ""))))
lal committed
542 543
			    				.starttime(("").equals(shiftm.getXbqjks2()) || shiftm.getXbqjks2()== null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjks2()+":00").replaceAll("\r|\n", ""))))
			    				.endtime(("").equals(shiftm.getXbqjjs2()) || shiftm.getXbqjjs2()== null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjjs2()+":00").replaceAll("\r|\n", "")))).build();
ilal committed
544 545 546 547 548 549 550 551
			    		atts.add(as);
	    			}
	    		}
	    		attcar.setAttsch(atts);
	    	}
	    	if(shiftm.getSxbcs() == 3){//3次上下班
	    		for(int o=0;o<2;o++){
	    			if(o==0){
lal committed
552
			    		AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(5).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbdk3()+":00").replaceAll("\r|\n", ""))))
lal committed
553 554
			    				.starttime(("").equals(shiftm.getSbqjks3()) || shiftm.getSbqjks3() == null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjks3()+":00").replaceAll("\r|\n", ""))))
			    				.endtime(("").equals(shiftm.getSbqjjs3()) || shiftm.getSbqjjs3() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjjs3()+":00").replaceAll("\r|\n", "")))).build();
ilal committed
555 556
			    		atts.add(as);
	    			}else{
lal committed
557
			    		AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(6).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbdk3()+":00").replaceAll("\r|\n", ""))))
lal committed
558 559
			    				.starttime(("").equals(shiftm.getXbqjks3()) || shiftm.getXbqjks3()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjks3()+":00").replaceAll("\r|\n", ""))))
			    				.endtime(("").equals(shiftm.getXbqjjs3()) || shiftm.getXbqjjs3() ==null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjjs3()+":00").replaceAll("\r|\n", "")))).build();
ilal committed
560 561 562 563 564 565 566
			    		atts.add(as);
	    			}
	    		}
	    		attcar.setAttsch(atts);
	    	}
	 }
}