From 277cf33c93dc8ca4bad2711fd3c5e19a271178d1 Mon Sep 17 00:00:00 2001 From: pzy2 Date: Wed, 29 May 2024 10:38:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=81=9A=E6=89=8D?= =?UTF-8?q?=E6=9E=97=E6=89=93=E5=8D=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/AttendanceJucailinButtonAction.java | 265 ++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 src/com/engine/attendance/attendanceanalysis/web/AttendanceJucailinButtonAction.java diff --git a/src/com/engine/attendance/attendanceanalysis/web/AttendanceJucailinButtonAction.java b/src/com/engine/attendance/attendanceanalysis/web/AttendanceJucailinButtonAction.java new file mode 100644 index 0000000..27bf45d --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/web/AttendanceJucailinButtonAction.java @@ -0,0 +1,265 @@ +package com.engine.attendance.attendanceanalysis.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cloudstore.dev.api.util.EMManager; +import com.engine.common.util.ApiReturnTools; +import com.engine.common.util.ParamUtil; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import weaver.common.DateUtil; +import weaver.conn.RecordSet; +import weaver.dateformat.DateTransformer; +import weaver.dateformat.TimeZoneVar; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.systeminfo.SystemEnv; + +@Slf4j +@Path("/hrm/kq/jucailin/button") +public class AttendanceJucailinButtonAction { + + private DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + /** + * 将所有的企业日历取消默认值标记 + */ + @POST + @Path("/getButtonBaseInfo") + @Produces(MediaType.TEXT_PLAIN) + public String getButtonBaseInfo(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map retmap = new HashMap(); + User user = HrmUserVarify.getUser (request , response) ; + try { + ResourceComInfo resourceComInfo = new ResourceComInfo(); + String lastname = user.getLastname(); + String messagerurl = resourceComInfo.getMessagerUrls("" + user.getUID()); + String shortname = ""; + + boolean USERICONLASTNAME = Util.null2String(new BaseBean().getPropValue("Others", "USERICONLASTNAME")).equals("1"); + if (USERICONLASTNAME && (messagerurl.indexOf("icon_w_wev8.jpg") > -1 || messagerurl.indexOf("icon_m_wev8.jpg") > -1 || messagerurl.indexOf("dummyContact.png") > -1)) { + shortname = User.getLastname(Util.null2String(Util.formatMultiLang(lastname, "" + user.getLanguage()))); + } + String curDate = DateUtil.getCurrentDate(); + + retmap.put("userid", user.getUID()); + retmap.put("lastname", lastname); + retmap.put("shortname", shortname); + retmap.put("messagerurl", messagerurl); + + retmap.put("date", curDate); + retmap.put("timemillis", System.currentTimeMillis()); + + retmap.put("status", "1"); + } catch (Exception e) { + log.error("execute fail,catch error: [{}]",e); + retmap.put("status", "-1"); + return ApiReturnTools.error("500",SystemEnv.getHtmlLabelName(382661, user.getLanguage())); + } + return JSONObject.toJSONString(retmap); + } + + /** + * 获取签到签退按钮 + * 以及考勤流程数据 + * 以及上次签到时间 + * @param request + * @param response + * @return + */ + @POST + @Path("/getButtons") + @Produces(MediaType.TEXT_PLAIN) + public String getButtons(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map retmap = new HashMap(); + User user = HrmUserVarify.getUser (request , response) ; + try{ + LocalDateTime now = LocalDateTime.now(); + String curDate = DateUtil.getCurrentDate(); + //真正的考勤时间线 + ResourceComInfo resourceComInfo = new ResourceComInfo(); + + String lastname = user.getLastname(); + String messagerurl = resourceComInfo.getMessagerUrls(""+user.getUID()); + String shortname = ""; + + boolean USERICONLASTNAME = Util.null2String(new BaseBean().getPropValue("Others" , "USERICONLASTNAME")).equals("1"); + if(USERICONLASTNAME&&(messagerurl.indexOf("icon_w_wev8.jpg")>-1||messagerurl.indexOf("icon_m_wev8.jpg")>-1||messagerurl.indexOf("dummyContact.png")>-1)){ + shortname = User.getLastname(Util.null2String(Util.formatMultiLang(lastname, ""+user.getLanguage()))); + } + String resourceId = String.valueOf(user.getUID()); + + List signListLine = getSignListLine(resourceId,curDate); + + retmap.put("lastname", lastname); + retmap.put("shortname", shortname); + retmap.put("messagerurl", messagerurl); + retmap.put("date", curDate); + retmap.put("timeline", signListLine); + retmap.put("status", "1"); + retmap.put("now", now.format(fullFormatter)); + + }catch (Exception e) { + retmap.put("status", "-1"); + retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); + } + return JSONObject.toJSONString(retmap); + } + + /** + * 针对非工作时间的签到签退 + */ + private List getSignListLine(String resourceId, String curDate) { + List signListLine = Lists.newArrayList(); + RecordSet recordSet = new RecordSet(); + String sql = "select * from hrmschedulesign where userid = "+resourceId+" and signDate='"+curDate+"' order by signTime desc "; + recordSet.executeQuery(sql); + while (recordSet.next()){ + String signDate = recordSet.getString("signDate"); + String signTime = recordSet.getString("signTime"); + String signDateTime = signDate+" "+signTime; + String addr = Util.null2String(recordSet.getString("addr")); + Map cardTimelineMap = new HashMap<>(); + cardTimelineMap.put("date", curDate); + cardTimelineMap.put("signTime", signDateTime); + cardTimelineMap.put("position", addr); + signListLine.add(cardTimelineMap); + } + return signListLine; + } + + /** + * 签到签退 + * @param request + * @param response + * @return + */ + @POST + @Path("/punchButton") + @Produces(MediaType.TEXT_PLAIN) + public String punchButton(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map retmap = new HashMap(); + User user = HrmUserVarify.getUser (request , response) ; + try{ + Map params = ParamUtil.request2Map(request); + RecordSet rs = new RecordSet(); + String deviceInfo = Util.null2String(params.get("deviceInfo")); + JSONObject jsonObject = null; + if(deviceInfo.length() > 0){ + jsonObject = JSON.parseObject(deviceInfo); + JSONObject jsonObject1 = new JSONObject(); + Set> jsonSet = jsonObject.entrySet(); + for(Entry js : jsonSet){ + String key = js.getKey(); + String value = Util.null2String(js.getValue()); + jsonObject1.put(key, value); + } + if(!jsonObject1.isEmpty()){ + deviceInfo = jsonObject1.toJSONString(); + } + } + + //手机打卡部分 + String longitude = Util.null2String(params.get("longitude")); + String latitude = Util.null2String(params.get("latitude")); + String signData = Util.null2String(params.get("signData")); + + //wifi用的 + String mac = Util.null2String(params.get("mac")); + String sid = Util.null2String(params.get("sid")); + String addr = Util.null2String(params.get("position")); + String showaddress =addr; + String ismobile = Util.null2String(params.get("ismobile")); + //区分是来自于钉钉还是EM7 + String browser = Util.null2String(params.get("browser")); + + DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + LocalTime localTime = LocalTime.now(); + String signTime =localTime.format(dateTimeFormatter); + String signDate = LocalDate.now().format(dateFormatter); + + String timeZone = Util.null2String(TimeZoneVar.getTimeZone(),""); + //处理多时区 + String timeZoneConversion = Util.null2String(new weaver.general.BaseBean().getPropValue("weaver_timezone_conversion","timeZoneConversion")).trim(); + if("1".equals(timeZoneConversion)) { + DateTransformer dateTransformer=new DateTransformer(); + String[] zone_localTime = dateTransformer.getLocaleDateAndTime(signDate,signTime); + if(zone_localTime != null && zone_localTime.length == 2){ + signDate = zone_localTime[0]; + signTime = zone_localTime[1]; + } + } + + int userId = user.getUID(); + String userType = user.getLogintype(); + String clientAddress = Util.getIpAddr(request); + String isInCom = "1"; + + String datetime_timezone = signDate+" "+signTime; + LocalDateTime nowDateTime = LocalDateTime.parse(datetime_timezone,fullFormatter); + + //记录下是来自于E9的pc端签到 + String signfrom = "e9pc"; + if("1".equalsIgnoreCase(ismobile)){ + signfrom = "e9mobile"; + if("DingTalk".equalsIgnoreCase(browser)){ + signfrom = "DingTalk"; + }else if("Wechat".equalsIgnoreCase(browser)){ + signfrom = "Wechat"; + String weChat_deviceid = Util.null2String(request.getSession().getAttribute( + EMManager.DeviceId)); + if(weChat_deviceid.length() > 0){ + //微信打卡的设备号需要单独处理 + if(jsonObject != null){ + jsonObject.put("deviceId", weChat_deviceid); + }else{ + jsonObject = new JSONObject(); + jsonObject.put("deviceId", weChat_deviceid); + } + if(!jsonObject.isEmpty()){ + deviceInfo = jsonObject.toJSONString(); + } + } + } + } + + deviceInfo = deviceInfo.replaceAll("\\?", ""); + String signType = "1"; + String belongdate = signDate; + String punchSql = "insert into HrmScheduleSign(userId,userType,signType,signDate,signTime,clientAddress,isInCom,timeZone,belongdate,signfrom,longitude,latitude,addr,deviceInfo,showaddress) "+ + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + boolean isOk = rs.executeUpdate(punchSql,userId,userType,signType,signDate,signTime,clientAddress,isInCom, + timeZone,belongdate,signfrom,longitude,latitude,addr,deviceInfo,showaddress); + log.info(user.getLastname()+":PunchButtonCmd:punchSql:"+punchSql+":isOk:"+isOk); + + retmap.put("status", "1"); + retmap.put("signdate", signDate); + retmap.put("signtime", signTime); + }catch (Exception e){ + retmap.put("status", "-1"); + retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); + } + return JSONObject.toJSONString(retmap); + } +}