liupeng 5 роки тому
батько
коміт
7e5fecfcec

+ 8 - 6
code/sapparent/sapcms/src/main/java/org/fouram/controller/ReportController.java

@@ -8,6 +8,7 @@ import org.fouram.core.util.AppUtil.ResultConstant;
 import org.fouram.core.util.DateUtil;
 import org.fouram.core.util.LoggerUtil;
 import org.fouram.service.SapApprovalInfoService;
+import org.fouram.service.SapCheckOptionService;
 import org.fouram.service.SapCheckService;
 import org.fouram.service.SapEmployeeTimeService;
 import org.fouram.service.WxDepartService;
@@ -28,6 +29,8 @@ public class ReportController extends BaseController {
 	@Autowired
 	private SapCheckService sapCheckService;
 	@Autowired
+	private SapCheckOptionService sapCheckOptionService;
+	@Autowired
 	private SapEmployeeTimeService employeeTimeService;
 	@Autowired
 	private SapApprovalInfoService sapApprovalInfoService;
@@ -43,13 +46,12 @@ public class ReportController extends BaseController {
 		try {
 			Date startDate = DateUtil.sdfTime.parse("2020-05-11 00:00:00");
 			Date endDate = DateUtil.sdfTime.parse("2020-05-15 23:59:59");
-			wxDepartService.saveDeparts();
-			wxUserService.saveUsers();
+			wxDepartService.saveDeparts(); // ok
+			wxUserService.saveUsers(); // ok
 			sapCheckService.saveAllUserCheckData(startDate, endDate);
-			sapCheckService.saveCheckoutStartAndEndData();
-			employeeTimeService.saveEmployeeTimes();
-			sapCheckService.saveAllUserCheckOption();
-			sapApprovalInfoService.saveApprovalInfos(DateUtil.sdfTime.parse("2020-05-01 00:00:00"), endDate);
+			employeeTimeService.saveEmployeeTimes(); // ok
+			sapCheckOptionService.saveOptions(); // ok
+			sapApprovalInfoService.saveApprovalInfos(DateUtil.sdfYear_MMonth.format(endDate)); // ok
 			return AppUtil.success();
 		} catch (Exception e) {
 			LoggerUtil.error(e);

+ 24 - 0
code/sapparent/sapservice/src/main/java/org/fouram/core/base/service/BaseService.java

@@ -1,6 +1,8 @@
 package org.fouram.core.base.service;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.annotation.Resource;
 
@@ -11,6 +13,8 @@ import org.fouram.core.util.Tools;
 import org.fouram.entity.SapUser;
 import org.springframework.http.HttpHeaders;
 
+import com.google.common.collect.Lists;
+
 /**
  * 业务逻辑层基类
  */
@@ -98,4 +102,24 @@ public abstract class BaseService {
 		return str;
 	}
 
+	public Map<String, List<String>> groupList(List<String> list) {
+		int listSize = list.size();
+		int toIndex = 100;
+		Map<String, List<String>> map = new HashMap<>(); // 用map存起来新的分组后数据
+		int keyToken = 0;
+		for (int i = 0; i < list.size(); i += 100) {
+			if (i + 100 > listSize) { // 作用为toIndex最后没有100条数据则剩余几条newList中就装几条
+				toIndex = listSize - i;
+			}
+			List<String> newList = list.subList(i, i + toIndex);
+			List<String> userIds = Lists.newArrayList();
+			for (String userId : newList) {
+				userIds.add(userId);
+			}
+			map.put("keyName" + keyToken, userIds);
+			keyToken++;
+		}
+
+		return map;
+	}
 }

+ 23 - 3
code/sapparent/sapservice/src/main/java/org/fouram/core/util/DateUtil.java

@@ -31,7 +31,7 @@ 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");
@@ -77,7 +77,7 @@ public class DateUtil {
 	public static String getDay2(Date date) {
 		return sdfDay2.format(date);
 	}
-	
+
 	public static String getDays(Date date) {
 		return sdfDays.format(date);
 	}
@@ -309,7 +309,7 @@ public class DateUtil {
 	}
 
 	public static void main(String[] args) throws ParseException {
-		System.out.println(getDays());
+		System.out.println(getLastDay("2020-05"));
 	}
 
 	// 根据开始日期 增加 月份后 算出 日期(yyyy-mm)
@@ -440,4 +440,24 @@ public class DateUtil {
 		}
 		return date.getTime();
 	}
+
+	public static String getLastDay(String yearMonth) {
+		int year = Integer.parseInt(yearMonth.split("-")[0]);  //年
+		int month = Integer.parseInt(yearMonth.split("-")[1]); //月
+		Calendar cal = Calendar.getInstance();
+		// 设置年份
+		cal.set(Calendar.YEAR, year);
+		// 设置月份
+		// cal.set(Calendar.MONTH, month - 1);
+		cal.set(Calendar.MONTH, month); //设置当前月的上一个月
+		// 获取某月最大天数
+		//int lastDay = cal.getActualMaximum(Calendar.DATE);
+		int lastDay = cal.getMinimum(Calendar.DATE); //获取月份中的最小值,即第一天
+		// 设置日历中月份的最大天数
+		//cal.set(Calendar.DAY_OF_MONTH, lastDay);
+		cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //上月的第一天减去1就是当月的最后一天
+		// 格式化日期
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		return sdf.format(cal.getTime());
+	}
 }

+ 4 - 0
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapApprovalInfoMapper.xml

@@ -5,4 +5,8 @@
 		insert into sap_approval_info(userId,time,day) 
 		values (#{userId},#{time},#{day})
 	</insert>
+	
+	<select id="selectListByUserIdAndDay" resultType="SapApprovalInfo">
+		select * from sap_approval_info where userId=#{userId} and day=#{day}
+	</select>
 </mapper>

+ 11 - 16
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapCheckMapper.xml

@@ -1,9 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="SapCheckMapper">
-	<select id="selectCheckUserList" resultType="String">
-		SELECT userId from wx_user
-	</select>
 	<update id="truncateCheckin">
 		truncate table sap_checkin
 	</update>
@@ -31,26 +28,31 @@
 		values (#{userId},#{groupName},#{checkinType},#{checkinDate},#{checkinDay},#{exceptionType},
 			#{checkinTime},#{locationTitle},#{locationDetail},#{wifiName},#{wifiMac})
 	</insert>
-	<update id="truncateCheckoutStart">
-		truncate table sap_checkout_start
+	<update id="deleteCheckoutStart">
+		delete from sap_checkout_start where checkinDay >= #{startDay} and checkinDay &lt;= #{endDay}
 	</update>
 	<insert id="saveCheckoutStart1">
 		insert into sap_checkout_start
 		SELECT a.* from sap_checkout a, (SELECT userId, checkinDay from sap_checkout GROUP BY userId, checkinDay having count(1) = 1) b
 		where a.userId = b.userId and a.checkinDay = b.checkinDay 
+			and checkinDay >= #{startDay} and checkinDay &lt;= #{endDay}
 	</insert>
 	<insert id="saveCheckoutStart2">
 		insert into sap_checkout_start
 		SELECT a.* from sap_checkout a, (SELECT userId, checkinDay,min(checkinDate) as checkinDate from sap_checkout GROUP BY userId, checkinDay having count(1) > 1) b
-		where a.userId = b.userId and a.checkinDay = b.checkinDay and a.checkinDate = b.checkinDate ORDER BY a.userId, a.checkinDay, a.checkinDate;
+		where a.userId = b.userId and a.checkinDay = b.checkinDay and a.checkinDate = b.checkinDate 
+				and checkinDay >= #{startDay} and checkinDay &lt;= #{endDay}
+		ORDER BY a.userId, a.checkinDay, a.checkinDate;
 	</insert>
-	<update id="truncateCheckoutEnd">
-		truncate table sap_checkout_end
+	<update id="deleteCheckoutEnd">
+		delete from sap_checkout_end where checkinDay >= #{startDay} and checkinDay &lt;= #{endDay}
 	</update>
 	<insert id="saveCheckoutEnd">
 		insert into sap_checkout_end
 		SELECT a.* from sap_checkout a, (SELECT userId, checkinDay,max(checkinDate) as checkinDate from sap_checkout GROUP BY userId, checkinDay having count(1) > 1) b
-		where a.userId = b.userId and a.checkinDay = b.checkinDay and a.checkinDate = b.checkinDate ORDER BY a.userId, a.checkinDay, a.checkinDate;
+		where a.userId = b.userId and a.checkinDay = b.checkinDay and a.checkinDate = b.checkinDate 
+			and checkinDay >= #{startDay} and checkinDay &lt;= #{endDay}
+		ORDER BY a.userId, a.checkinDay, a.checkinDate;
 	</insert>
 	<update id="truncateCheckReport">
 		truncate table sap_check_report
@@ -85,13 +87,6 @@
 		replace(group_concat(case when a.checkinDay = '2020-05-15' then a.result else '' end ),',','') as '2020-05-15'
 		from sap_check_report a group by a.userId, a.name;
 	</insert>
-	<update id="truncateCheckOption">
-		truncate table sap_checkin_option
-	</update>
-	<insert id="saveCheckinOption">
-		insert into sap_checkin_option(userId,workSec,offWorkSec,workTime,offWorkTime) 
-		values (#{userId},#{workSec},#{offWorkSec},#{workTime},#{offWorkTime})
-	</insert>
 	
 	<update id="updateHrsdWorkTime">
 		update sap_check_report set workTime = '10:00' where groupName like '%华人时代%'

+ 12 - 0
code/sapparent/sapservice/src/main/java/org/fouram/mapper/SapCheckOptionMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SapCheckOptionMapper">
+	<select id="selectByUserId" resultType="SapCheckOption">
+		select * from sap_checkin_option where userId=#{userId}
+	</select>
+	
+	<insert id="save">
+		insert into sap_checkin_option(userId,workSec,offWorkSec,workTime,offWorkTime) 
+		values (#{userId},#{workSec},#{offWorkSec},#{workTime},#{offWorkTime})
+	</insert>
+</mapper>

+ 4 - 0
code/sapparent/sapservice/src/main/java/org/fouram/mapper/WxUserMapper.xml

@@ -15,4 +15,8 @@
 		set departId=#{departId},firstDepartName=#{firstDepartName},secondDepartName=#{secondDepartName}
 		where userId=#{userId}
 	</update>
+	
+	<select id="selectAllUserIds" resultType="String">
+		SELECT userId from wx_user
+	</select>
 </mapper>

+ 19 - 2
code/sapparent/sapservice/src/main/java/org/fouram/service/SapApprovalInfoService.java

@@ -5,16 +5,33 @@ import java.util.List;
 
 import org.fouram.core.base.service.BaseService;
 import org.fouram.core.plugin.weixin.cp.util.WXCpOaUtil;
+import org.fouram.core.util.DateUtil;
 import org.fouram.entity.SapApprovalInfo;
 import org.springframework.stereotype.Service;
 
 @Service
 public class SapApprovalInfoService extends BaseService {
 
-	public void saveApprovalInfos(Date startDate, Date endDate) throws Exception {
+	/**
+	 * 保存补卡记录
+	 * 
+	 * @param startDate
+	 * @param endDate
+	 * @throws Exception
+	 */
+	public void saveApprovalInfos(String yearMonth) throws Exception {
+		Date startDate = DateUtil.sdfTime.parse(yearMonth + "-01 00:00:00");
+		Date endDate = DateUtil.sdfTime.parse(DateUtil.getLastDay(yearMonth));
 		List<SapApprovalInfo> approvalInfos = WXCpOaUtil.getApprovalDetailList(startDate, endDate);
 		for (SapApprovalInfo approvalInfo : approvalInfos) {
-			save("SapApprovalInfoMapper.save", approvalInfo);
+			if (selectListByUserIdAndDay(approvalInfo).isEmpty()) {
+				save("SapApprovalInfoMapper.save", approvalInfo);
+			}
 		}
 	}
+
+	@SuppressWarnings("unchecked")
+	public List<SapApprovalInfo> selectListByUserIdAndDay(SapApprovalInfo approvalInfo) throws Exception {
+		return (List<SapApprovalInfo>) findList("SapApprovalInfoMapper.selectListByUserIdAndDay", approvalInfo);
+	}
 }

+ 48 - 0
code/sapparent/sapservice/src/main/java/org/fouram/service/SapCheckOptionService.java

@@ -0,0 +1,48 @@
+package org.fouram.service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.fouram.core.base.service.BaseService;
+import org.fouram.core.plugin.weixin.cp.util.WXCpOaUtil;
+import org.fouram.core.util.DateUtil;
+import org.fouram.entity.SapCheckOption;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.google.common.collect.Lists;
+
+import me.chanjar.weixin.cp.bean.oa.WxCpCheckinOption;
+import me.chanjar.weixin.cp.bean.oa.WxCpCheckinOption.CheckinTime;
+
+@Service
+public class SapCheckOptionService extends BaseService {
+	
+	@Autowired
+	private WxUserService wxUserService;
+
+	public void saveOptions() throws Exception {
+		List<String> userIds = wxUserService.selectAllUserIds();
+		Map<String, List<String>> map = groupList(userIds);
+		List<Date> datetimes = Lists.newArrayList();
+		datetimes.add(DateUtil.sdfTime.parse("2020-05-07 00:00:00"));
+		for (String key : map.keySet()) {
+			List<WxCpCheckinOption> options = WXCpOaUtil.getCheckinOption(datetimes, map.get(key));
+			for (WxCpCheckinOption option : options) {
+				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());
+					save(check);
+				}
+			}
+		}
+	}
+	
+	public void save(SapCheckOption check) throws Exception {
+		save("SapCheckOptionMapper.save", check);
+	}
+}

+ 16 - 66
code/sapparent/sapservice/src/main/java/org/fouram/service/SapCheckService.java

@@ -1,7 +1,6 @@
 package org.fouram.service;
 
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -14,45 +13,20 @@ import org.fouram.core.util.DateUtil;
 import org.fouram.core.util.LoggerUtil;
 import org.fouram.core.util.Tools;
 import org.fouram.entity.SapCheck;
-import org.fouram.entity.SapCheckOption;
 import org.fouram.entity.SapCheckReport;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
 import me.chanjar.weixin.cp.bean.oa.WxCpCheckinData;
-import me.chanjar.weixin.cp.bean.oa.WxCpCheckinOption;
-import me.chanjar.weixin.cp.bean.oa.WxCpCheckinOption.CheckinTime;
 
 @Service
 public class SapCheckService extends BaseService {
-
-	@SuppressWarnings("unchecked")
-	public List<String> selectCheckUserList() throws Exception {
-		return (List<String>) findList("SapCheckMapper.selectCheckUserList", null);
-	}
-
-	public Map<String, List<String>> groupList(List<String> list) {
-		int listSize = list.size();
-		int toIndex = 100;
-		Map<String, List<String>> map = new HashMap<>(); // 用map存起来新的分组后数据
-		int keyToken = 0;
-		for (int i = 0; i < list.size(); i += 100) {
-			if (i + 100 > listSize) { // 作用为toIndex最后没有100条数据则剩余几条newList中就装几条
-				toIndex = listSize - i;
-			}
-			List<String> newList = list.subList(i, i + toIndex);
-			List<String> userIds = Lists.newArrayList();
-			for (String userId : newList) {
-				userIds.add(userId);
-			}
-			map.put("keyName" + keyToken, userIds);
-			keyToken++;
-		}
-
-		return map;
-	}
+	
+	@Autowired
+	private WxUserService wxUserService;
 
 	public void saveAllUserCheckData(Date startDate, Date endDate) throws Exception {
 		LoggerUtil.info("执行微信打卡开始" + DateUtil.getTime());
@@ -61,7 +35,7 @@ public class SapCheckService extends BaseService {
 		update("SapCheckMapper.truncateCheckoff", null);
 		update("SapCheckMapper.truncateCheckout", null);
 
-		List<String> userIds = selectCheckUserList();
+		List<String> userIds = wxUserService.selectAllUserIds();
 		Map<String, List<String>> map = groupList(userIds);
 		for (String key : map.keySet()) {
 			List<WxCpCheckinData> checkinDatas = WXCpOaUtil.getCheckinData(startDate, endDate, map.get(key));
@@ -81,39 +55,19 @@ public class SapCheckService extends BaseService {
 				}
 			}
 		}
+		
+		Map<String, String> param = Maps.newHashMap();
+		param.put("startDay", DateUtil.getDay(startDate));
+		param.put("endDay", DateUtil.getDay(endDate));
+		update("SapCheckMapper.deleteCheckoutStart", param);
+		update("SapCheckMapper.deleteCheckoutEnd", param);
+		update("SapCheckMapper.saveCheckoutStart1", param);
+		update("SapCheckMapper.saveCheckoutStart2", param);
+		update("SapCheckMapper.saveCheckoutEnd", param);
+		
 		LoggerUtil.info("执行微信打卡结束" + DateUtil.getTime());
 	}
 
-	public void saveCheckoutStartAndEndData() throws Exception {
-		update("SapCheckMapper.truncateCheckoutStart", null);
-		update("SapCheckMapper.truncateCheckoutEnd", null);
-		update("SapCheckMapper.saveCheckoutStart1", null);
-		update("SapCheckMapper.saveCheckoutStart2", null);
-		update("SapCheckMapper.saveCheckoutEnd", null);
-	}
-
-	public void saveAllUserCheckOption() throws Exception {
-		update("SapCheckMapper.truncateCheckOption", null);
-
-		List<String> users = selectCheckUserList();
-		Map<String, List<String>> map = groupList(users);
-		List<Date> datetimes = Lists.newArrayList();
-		datetimes.add(DateUtil.sdfTime.parse("2020-05-07 00:00:00"));
-		for (String key : map.keySet()) {
-			List<WxCpCheckinOption> options = WXCpOaUtil.getCheckinOption(datetimes, map.get(key));
-			for (WxCpCheckinOption option : options) {
-				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);
-				}
-			}
-		}
-	}
-
 	public void saveCheckin(SapCheck check) throws Exception {
 		save("SapCheckMapper.saveCheckin", check);
 	}
@@ -126,10 +80,6 @@ public class SapCheckService extends BaseService {
 		save("SapCheckMapper.saveCheckout", check);
 	}
 
-	public void saveCheckinOption(SapCheckOption check) throws Exception {
-		save("SapCheckMapper.saveCheckinOption", check);
-	}
-
 	@SuppressWarnings("unchecked")
 	public void updateReportBaseData() throws Exception {
 		// 处理重复数据

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

@@ -18,7 +18,7 @@ public class SapEmployeeTimeService extends BaseService {
 	@Autowired
 	private RequestService requestService;
 	@Autowired
-	private SapCheckService checkService;
+	private WxUserService wxUserService;
 	
 	public String getUserIdList(List<String> sapUsers) {
 		String userIds = "";
@@ -29,9 +29,9 @@ public class SapEmployeeTimeService extends BaseService {
 	}
 
 	public void saveEmployeeTimes() throws Exception {
-		List<String> sapUsers = checkService.selectCheckUserList();
+		List<String> userIds = wxUserService.selectAllUserIds();
 		String url = "https://api15.sapsf.cn/odata/v2/EmployeeTime?$filter=userId in %s&$format=json";
-		url = String.format(url, getUserIdList(sapUsers));
+		url = String.format(url, getUserIdList(userIds));
 		JsonNode node = requestService.getForObject(url, getHttpHeaders());
 		if (node != null) {
 			Iterator<JsonNode> iterator = node.get("d").get("results").elements();

+ 5 - 0
code/sapparent/sapservice/src/main/java/org/fouram/service/WxUserService.java

@@ -62,4 +62,9 @@ public class WxUserService extends BaseService {
 		}
 		return userDepartMap.get(departId);
 	}
+	
+	@SuppressWarnings("unchecked")
+	public List<String> selectAllUserIds() throws Exception {
+		return (List<String>) findList("WxUserMapper.selectAllUserIds", null);
+	}
 }