liupeng 5 年 前
コミット
35a85f103b

+ 2 - 1
code/sapparent/sapcms/src/main/java/org/fouram/controller/ApiController.java

@@ -10,6 +10,7 @@ import javax.servlet.http.HttpSession;
 
 import org.apache.commons.lang3.StringUtils;
 import org.fouram.constants.WebConstants;
+import org.fouram.constants.WebConstants.DelFlagEnum;
 import org.fouram.core.base.controller.BaseController;
 import org.fouram.core.plugin.weixin.cp.core.WXCpMailList;
 import org.fouram.core.util.AppUtil;
@@ -186,7 +187,7 @@ public class ApiController extends BaseController {
 				return AppUtil.error("参数用户ID不可以为空");
 			}
 			SapUser sapUser = sapUserService.selectByUserId(userId);
-			if(!sapUser.getDelFlag()) {
+			if(sapUser.getDelFlag().intValue() != DelFlagEnum.UNABLE.intValue()) {
 				return AppUtil.error("该用户ID不是离职数据");
 			}
 			// 操作用户ID

+ 51 - 0
code/sapparent/sapcms/src/main/java/org/fouram/controller/TaskController.java

@@ -7,6 +7,7 @@ import org.fouram.core.util.LoggerUtil;
 import org.fouram.service.SapCheckService;
 import org.fouram.service.SapEmployeeTimeService;
 import org.fouram.service.SapReportService;
+import org.fouram.service.SapUserService;
 import org.fouram.service.TaskService;
 import org.fouram.service.TestUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +26,8 @@ public class TaskController extends BaseController {
 	@Autowired
 	private SapReportService sapReportService;
 	@Autowired
+	private SapUserService sapUserService;
+	@Autowired
 	private SapCheckService sapCheckService;
 	@Autowired
 	private SapEmployeeTimeService employeeTimeService;
@@ -90,6 +93,22 @@ public class TaskController extends BaseController {
 	}
 	
 	/**
+	 * http://localhost:8080/sapcms/task/saveAllUserCheckOption
+	 * @return
+	 */
+	@RequestMapping(value = "/saveAllUserCheckOption", produces = "application/json;charset=utf-8")
+	@ResponseBody
+	public Object saveAllUserCheckOption() {
+		try {
+			sapCheckService.saveAllUserCheckOption();
+			return AppUtil.success();
+		} catch (Exception e) {
+			LoggerUtil.error(e);
+			return AppUtil.error(ResultConstant.WEB_ERR_MSG);
+		}
+	}
+	
+	/**
 	 * http://localhost:8080/sapcms/task/saveEmployeeTimes
 	 * @return
 	 */
@@ -104,4 +123,36 @@ public class TaskController extends BaseController {
 			return AppUtil.error(ResultConstant.WEB_ERR_MSG);
 		}
 	}
+	
+	/**
+	 * http://localhost:8080/sapcms/task/updateUnableData
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUnableData", produces = "application/json;charset=utf-8")
+	@ResponseBody
+	public Object updateUnableData() {
+		try {
+			sapUserService.updateUnableData();
+			return AppUtil.success();
+		} catch (Exception e) {
+			LoggerUtil.error(e);
+			return AppUtil.error(ResultConstant.WEB_ERR_MSG);
+		}
+	}
+	
+	/**
+	 * http://localhost:8080/sapcms/task/updateReportData
+	 * @return
+	 */
+	@RequestMapping(value = "/updateReportData", produces = "application/json;charset=utf-8")
+	@ResponseBody
+	public Object updateReportData() {
+		try {
+			sapCheckService.updateReportData();
+			return AppUtil.success();
+		} catch (Exception e) {
+			LoggerUtil.error(e);
+			return AppUtil.error(ResultConstant.WEB_ERR_MSG);
+		}
+	}
 }

+ 6 - 0
code/sapparent/sapservice/src/main/java/org/fouram/constants/WebConstants.java

@@ -28,4 +28,10 @@ public final class WebConstants {
 	public static final String ORG4 = "cust_org4";
 	
 	public static final String OPRTYPE_DELETE = "DELETE";
+	
+	public interface DelFlagEnum {
+		Integer ENABLE = 0;
+		Integer UNABLE = 1;
+		Integer DELETED = 2;
+	}
 }

+ 18 - 4
code/sapparent/sapservice/src/main/java/org/fouram/core/plugin/weixin/cp/util/WXCpOaUtil.java

@@ -3,14 +3,16 @@ package org.fouram.core.plugin.weixin.cp.util;
 import static org.fouram.core.plugin.weixin.cp.core.WXCpOaBase.oaService;
 
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
+import org.fouram.core.util.DateUtil;
+
 import com.google.common.collect.Lists;
 
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.cp.bean.WxCpCheckinData;
+import me.chanjar.weixin.cp.bean.WxCpCheckinOption;
 
 /**
  * 企业微信用户工具类
@@ -29,8 +31,20 @@ public class WXCpOaUtil {
 		}
 	}
 
-	public static void main(String[] args) throws WxErrorException, ParseException {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		System.out.println(getCheckinData(sdf.parse("2020-04-01"), sdf.parse("2020-04-30"), Lists.newArrayList("1017")));
+	public static List<WxCpCheckinOption> getCheckinOption(List<Date> datetimes, List<String> userIdList) {
+		try {
+			List<WxCpCheckinOption> result = Lists.newArrayList();
+			for (Date datetime : datetimes) {
+				oaService.getCheckinOption(datetime, userIdList).stream().forEach(option -> result.add(option));
+			}
+			return result;
+		} catch (WxErrorException e) {
+			e.printStackTrace();
+			return Lists.newArrayList();
+		}
+	}
+
+	public static void main(String[] args) throws ParseException {
+		System.out.println(getCheckinOption(Lists.newArrayList(DateUtil.sdfTime.parse("2020-04-09 00:00:00")), Lists.newArrayList("500008")));
 	}
 }

+ 2 - 0
code/sapparent/sapservice/src/main/java/org/fouram/core/util/DateUtil.java

@@ -31,6 +31,8 @@ public class DateUtil {
 	public static final SimpleDateFormat sdfDay2 = new SimpleDateFormat("yyyy/MM/dd");
 
 	public static final SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd");
+	
+	public static final SimpleDateFormat sdfsTime = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 
 	public static final SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 

+ 16 - 4
code/sapparent/sapservice/src/main/java/org/fouram/core/util/Tools.java

@@ -35,6 +35,18 @@ public class Tools {
 		return r.nextInt(900000) + 100000;
 	}
 
+	/*
+	 * 判断是否为整数
+	 * 
+	 * @param str 传入的字符串
+	 * 
+	 * @return 是整数返回true,否则返回false
+	 */
+	public static boolean isInteger(String str) {
+		Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
+		return pattern.matcher(str).matches();
+	}
+
 	public static String getPorjectPath() {
 		String nowpath = "";
 		nowpath = System.getProperty("user.dir") + "/";
@@ -364,11 +376,11 @@ public class Tools {
 		System.out.println(formatPhone("‭13888811166"));
 		System.out.println(formatPhone("‭13888811166").length());
 	}
-	
-	public static String formatPhone(String str){
+
+	public static String formatPhone(String str) {
 		String phone = "";
-		for(int i = 0; i < str.length(); i ++){
-			if(NumberUtils.isNumber(String.valueOf(str.charAt(i)))){
+		for (int i = 0; i < str.length(); i++) {
+			if (NumberUtils.isNumber(String.valueOf(str.charAt(i)))) {
 				phone += String.valueOf(str.charAt(i));
 			}
 		}

+ 25 - 0
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapCheckOption.java

@@ -0,0 +1,25 @@
+package org.fouram.entity;
+
+import java.io.Serializable;
+
+import org.apache.ibatis.type.Alias;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Alias(value = "SapCheckOption")
+public class SapCheckOption implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private String userId;
+	private Long workSec;
+	private String workTime;
+	private Long offWorkSec;
+	private String offWorkTime;
+}

+ 39 - 0
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapCheckReport.java

@@ -0,0 +1,39 @@
+package org.fouram.entity;
+
+import java.io.Serializable;
+
+import org.apache.ibatis.type.Alias;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Alias(value = "SapCheckReport")
+public class SapCheckReport implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	private String userId;
+	private String workTime;
+	private String offWorkTime;
+	private String name;
+	private String checkinDay;
+	private String checkinDate;
+	private String checkinException;
+	private String checkoffDate;
+	private String checkoffException;
+	private String checkoutDate1;
+	private String checkoutDate2;
+	private String leaveCreatedTime;
+	private String leaveStartDate;
+	private String leaveEndDate;
+	private String leaveDay;
+	private String leaveComment;
+	private String result;
+
+}

+ 1 - 1
code/sapparent/sapservice/src/main/java/org/fouram/entity/SapUser.java

@@ -51,7 +51,7 @@ public class SapUser implements Serializable {
 	private String formatEmail;
 	private Boolean isPrimary;
 	private String result;
-	private Boolean delFlag;
+	private Integer delFlag;
 	private Date createDate;
 	private Integer sortNumber;
 

+ 22 - 0
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapCheckMapper.xml

@@ -21,4 +21,26 @@
 		values (#{userId},#{groupName},#{checkinType},#{checkinDate},#{checkinDay},#{exceptionType},
 			#{checkinTime},#{locationTitle},#{locationDetail},#{wifiName},#{wifiMac})
 	</insert>
+	
+	<insert id="saveCheckinOption">
+		insert into sap_checkin_option(userId,workSec,offWorkSec,workTime,offWorkTime) 
+		values (#{userId},#{workSec},#{offWorkSec},#{workTime},#{offWorkTime})
+	</insert>
+	
+	<update id="updateAllExceptionResult">
+		update sap_check_report set result = '异常' 
+		where (LENGTH(checkinException) > 0 or LENGTH(checkoffException) > 0) and result = '正常'
+	</update>
+
+	<update id="updateResultOk">
+		update sap_check_report set result = '正常' where id = #{id}
+	</update>
+	
+	<select id="selectLeaveDayList" resultType="SapCheckReport">
+		SELECT * from sap_check_report where result = '异常' and leaveDay is not null;
+	</select>
+	
+	<select id="selectCheckoutList" resultType="SapCheckReport">
+		SELECT * from sap_check_report where result = '异常' and checkoutDate1 is not null;
+	</select>
 </mapper>

+ 5 - 1
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapUserMapper.xml

@@ -99,7 +99,11 @@
 		order by sortNumber ASC
 	</select>
 	
+	<delete id="updateUnableByUserId">
+		update sap_user set delFlag = 1 where userId=#{userId} 
+	</delete>
+	
 	<delete id="deleteByUserId">
-		delete from sap_user where userId=#{userId} 
+		update sap_user set delFlag = 2 where userId=#{userId} 
 	</delete>
 </mapper>

+ 115 - 0
code/sapparent/sapservice/src/main/java/org/fouram/service/SapCheckService.java

@@ -5,11 +5,15 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
 import org.fouram.core.base.service.BaseService;
 import org.fouram.core.plugin.weixin.cp.util.WXCpOaUtil;
 import org.fouram.core.util.BeanUtils;
 import org.fouram.core.util.DateUtil;
+import org.fouram.core.util.Tools;
 import org.fouram.entity.SapCheck;
+import org.fouram.entity.SapCheckOption;
+import org.fouram.entity.SapCheckReport;
 import org.fouram.entity.SapUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -17,6 +21,8 @@ import org.springframework.stereotype.Service;
 import com.google.common.collect.Lists;
 
 import me.chanjar.weixin.cp.bean.WxCpCheckinData;
+import me.chanjar.weixin.cp.bean.WxCpCheckinOption;
+import me.chanjar.weixin.cp.bean.WxCpCheckinOption.CheckinTime;
 
 @Service
 public class SapCheckService extends BaseService {
@@ -77,6 +83,38 @@ public class SapCheckService extends BaseService {
 		}
 	}
 
+	public void saveAllUserCheckOption() throws Exception {
+		List<SapUser> users = userService.selectSuccessList();
+		Map<String, List<String>> map = groupList(users);
+		int count = 0;
+		List<Date> datetimes = Lists.newArrayList();
+		datetimes.add(DateUtil.sdfTime.parse("2020-04-09 00:00:00"));
+		for (String key : map.keySet()) {
+			count = count + 1;
+			List<WxCpCheckinOption> options = WXCpOaUtil.getCheckinOption(datetimes, map.get(key));
+			System.out.println(options.size());
+			int subCount = 0;
+			for (WxCpCheckinOption option : options) {
+				subCount = subCount + 1;
+				if (option.getGroup() != null && !option.getGroup().getCheckinDate().isEmpty()) {
+					SapCheckOption check = new SapCheckOption();
+					CheckinTime checkinTime = option.getGroup().getCheckinDate().get(0).getCheckinTime()[0];
+					check.setUserId(option.getUserId());
+					check.setWorkSec(checkinTime.getWorkSec());
+					check.setOffWorkSec(checkinTime.getOffWorkSec());
+					saveCheckinOption(check);
+				}
+				System.out.println(subCount);
+			}
+			System.out.println(count);
+		}
+	}
+
+	public static void main(String[] args) {
+		System.out.println(34200 / 60 / 60.0);
+		System.out.println(66600 / 60 / 60.0);
+	}
+
 	public void saveCheckin(SapCheck check) throws Exception {
 		save("SapCheckMapper.saveCheckin", check);
 	}
@@ -88,4 +126,81 @@ public class SapCheckService extends BaseService {
 	public void saveCheckout(SapCheck check) throws Exception {
 		save("SapCheckMapper.saveCheckout", check);
 	}
+
+	public void saveCheckinOption(SapCheckOption check) throws Exception {
+		save("SapCheckMapper.saveCheckinOption", check);
+	}
+
+	@SuppressWarnings("unchecked")
+	public void updateReportData() throws Exception {
+		// 更新所有异常事件的数据为异常数据
+		update("SapCheckMapper.updateAllExceptionResult", null);
+		// 查询有请假情况的数据
+		List<SapCheckReport> checkReports = (List<SapCheckReport>) findList("SapCheckMapper.selectLeaveDayList", null);
+		for (SapCheckReport checkReport : checkReports) {
+			if (Tools.isInteger(checkReport.getLeaveDay())) {
+				update("SapCheckMapper.updateResultOk", checkReport.getId());
+			} else {
+				// 0.5
+				if (isOkWorkTime(checkReport) || isOkOffWorkTime(checkReport)) {
+					update("SapCheckMapper.updateResultOk", checkReport.getId());
+				}
+			}
+		}
+
+		checkReports = (List<SapCheckReport>) findList("SapCheckMapper.selectCheckoutList", null);
+		for (SapCheckReport checkReport : checkReports) {
+			if (isOkWorkTime(checkReport) && isOkOffWorkTime(checkReport)) {
+				update("SapCheckMapper.updateResultOk", checkReport.getId());
+			}
+		}
+	}
+
+	// 是不是正确的上班时间
+	private boolean isOkWorkTime(SapCheckReport checkReport) throws Exception {
+		if (StringUtils.isBlank(checkReport.getCheckinException())
+				&& StringUtils.isNotBlank(checkReport.getCheckinDate())) {
+			if (DateUtil.sdfTime.parse(checkReport.getCheckinDate()).getTime() <= DateUtil.sdfsTime
+					.parse(checkReport.getCheckinDay() + " " + checkReport.getWorkTime()).getTime()) {
+				return true;
+			}
+		}
+		if (StringUtils.isNotBlank(checkReport.getCheckoutDate1())) {
+			if (DateUtil.sdfTime.parse(checkReport.getCheckoutDate1()).getTime() <= DateUtil.sdfsTime
+					.parse(checkReport.getCheckinDay() + " " + checkReport.getWorkTime()).getTime()) {
+				return true;
+			}
+		}
+		if (StringUtils.isNotBlank(checkReport.getCheckoutDate2())) {
+			if (DateUtil.sdfTime.parse(checkReport.getCheckoutDate2()).getTime() <= DateUtil.sdfsTime
+					.parse(checkReport.getCheckinDay() + " " + checkReport.getWorkTime()).getTime()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	// 是不是正确的下班时间
+	private boolean isOkOffWorkTime(SapCheckReport checkReport) throws Exception {
+		if (StringUtils.isBlank(checkReport.getCheckoffException())
+				&& StringUtils.isNotBlank(checkReport.getCheckoffDate())) {
+			if (DateUtil.sdfTime.parse(checkReport.getCheckoffDate()).getTime() >= DateUtil.sdfsTime
+					.parse(checkReport.getCheckinDay() + " " + checkReport.getOffWorkTime()).getTime()) {
+				return true;
+			}
+		}
+		if (StringUtils.isNotBlank(checkReport.getCheckoutDate1())) {
+			if (DateUtil.sdfTime.parse(checkReport.getCheckoutDate1()).getTime() >= DateUtil.sdfsTime
+					.parse(checkReport.getCheckinDay() + " " + checkReport.getWorkTime()).getTime()) {
+				return true;
+			}
+		}
+		if (StringUtils.isNotBlank(checkReport.getCheckoutDate2())) {
+			if (DateUtil.sdfTime.parse(checkReport.getCheckoutDate2()).getTime() >= DateUtil.sdfsTime
+					.parse(checkReport.getCheckinDay() + " " + checkReport.getOffWorkTime()).getTime()) {
+				return true;
+			}
+		}
+		return false;
+	}
 }

+ 21 - 3
code/sapparent/sapservice/src/main/java/org/fouram/service/SapUserService.java

@@ -6,6 +6,7 @@ import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
 import org.fouram.constants.WebConstants;
+import org.fouram.constants.WebConstants.DelFlagEnum;
 import org.fouram.core.base.model.PageData;
 import org.fouram.core.base.service.BaseService;
 import org.fouram.core.base.service.RequestService;
@@ -23,6 +24,8 @@ import org.springframework.stereotype.Service;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.collect.Lists;
 
+import me.chanjar.weixin.cp.bean.WxCpUser;
+
 @Service
 public class SapUserService extends BaseService {
 
@@ -87,19 +90,19 @@ public class SapUserService extends BaseService {
 
 	public void saveOneAndSyncWX(SapUser entity) throws Exception {
 		entity.setCreateDate(new Date());
-		entity.setDelFlag(false);
+		entity.setDelFlag(DelFlagEnum.ENABLE);
 		save("SapUserMapper.saveOne", entity);
 		// 更新同步企业微信备注
 		updateWXResult(entity.getPersonId());
 	}
 
 	public void updateEnable(String userId) throws Exception {
-		SapUser entity = SapUser.builder().userId(userId).delFlag(false).build();
+		SapUser entity = SapUser.builder().userId(userId).delFlag(DelFlagEnum.ENABLE).build();
 		update("SapUserMapper.updateDelFlag", entity);
 	}
 
 	public void updateOneAndSyncWX(SapUser entity) throws Exception {
-		entity.setDelFlag(false);
+		entity.setDelFlag(DelFlagEnum.ENABLE);
 		update("SapUserMapper.updateOne", entity);
 		// 更新同步企业微信备注
 		updateWXResult(entity.getPersonId());
@@ -250,6 +253,10 @@ public class SapUserService extends BaseService {
 	public void deleteByUserId(String userId) throws Exception {
 		update("SapUserMapper.deleteByUserId", userId);
 	}
+	
+	public void updateUnableByUserId(String userId) throws Exception {
+		update("SapUserMapper.updateUnableByUserId", userId);
+	}
 
 	public void deleteQuitUserByUserId(String userId, String oprUserId) throws Exception {
 		SapUser sapUser = selectByUserId(userId);
@@ -261,4 +268,15 @@ public class SapUserService extends BaseService {
 		WXCpUserUtil.delete(personId);
 		sapOprLogService.saveOne(JSONUtil.toString(sapUsers), WebConstants.OPRTYPE_DELETE, oprUserId);
 	}
+	
+	public void updateUnableData() throws Exception {
+		List<SapUser> users = selectSuccessList();
+		for(SapUser user : users) {
+			WxCpUser wxUser = WXCpUserUtil.getByIdOrEmail(user.getUserId(), user.getEmail());
+			if(wxUser == null) {
+				System.out.println(user.getUserId());
+				updateUnableByUserId(user.getUserId());
+			}
+		}
+	}
 }