东方骏驰打卡数据 补卡数据更新建模表

东方骏驰
Chengliang 2 years ago
parent fe7fde8ac0
commit b851526e98

@ -1,10 +1,13 @@
package com.api.kqsolution.web; package com.api.kqsolution.web;
import javax.ws.rs.Path;
/** /**
* @Author liang.cheng * @Author liang.cheng
* @Date 2023/9/18 11:42 AM * @Date 2023/9/18 11:42 AM
* @Description: * @Description:
* @Version 1.0 * @Version 1.0
*/ */
public class SignDataSummaryAction { @Path("/kqsolution/cube")
public class SignDataSummaryAction extends com.engine.kqsolution.web.SignDataSummaryAction{
} }

@ -0,0 +1,52 @@
package com.engine.kqsolution.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2023/9/18 2:22 PM
* @Description:
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SignDataPO {
private Integer id;
private String attendanceMonth;
private String attendanceDate;
private Integer resourceId;
private Integer company;
private Integer department;
private Integer jobTitle;
private String signInDate;
private String signInTime;
private String signOutDate;
private String signOutTime;
private String signMins;
private Double signHours;
private Double workHours;
private Integer status;
}

@ -0,0 +1,38 @@
package com.engine.kqsolution.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import weaver.general.StringUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author liang.cheng
* @Date 2023/9/18 2:14 PM
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SignDataParams {
private String attendanceDate;
private String formModeId;
private String ids;
public List<Integer> getIds() {
if(StringUtil.isEmpty(ids)){
return new ArrayList<>();
}
return Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList());
}
}

@ -1,5 +1,9 @@
package com.engine.kqsolution.service; package com.engine.kqsolution.service;
import com.engine.kqsolution.entity.SignDataParams;
import java.util.Map;
/** /**
* @Author liang.cheng * @Author liang.cheng
* @Date 2023/9/18 11:44 AM * @Date 2023/9/18 11:44 AM
@ -7,4 +11,13 @@ package com.engine.kqsolution.service;
* @Version 1.0 * @Version 1.0
*/ */
public interface SignDataSummaryService { public interface SignDataSummaryService {
/**
* @Description:
* @Author: liang.cheng
* @Date: 2023/9/18 2:18 PM
* @param: [signDataParams]
* @return: java.util.Map<java.lang.String,java.lang.Object>
*/
Map<String,Object> recordSignData(SignDataParams signDataParams);
} }

@ -1,10 +1,189 @@
package com.engine.kqsolution.service.impl; package com.engine.kqsolution.service.impl;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.engine.core.impl.Service;
import com.engine.kqsolution.entity.SignDataPO;
import com.engine.kqsolution.entity.SignDataParams;
import com.engine.kqsolution.service.SignDataSummaryService;
import lombok.SneakyThrows;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import weaver.conn.RecordSet;
import weaver.conn.RecordSetTrans;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.resource.ResourceComInfo;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.ExecutorService;
/** /**
* @Author liang.cheng * @Author liang.cheng
* @Date 2023/9/18 11:45 AM * @Date 2023/9/18 11:45 AM
* @Description: TODO * @Description:
* @Version 1.0 * @Version 1.0
*/ */
public class SignDataSummaryServiceImpl { public class SignDataSummaryServiceImpl extends Service implements SignDataSummaryService {
public static final DateTimeFormatter MONTH_FORMATTER_PATTERN = DateTimeFormatter.ofPattern("yyyy-MM");
@SneakyThrows
@Override
public Map<String, Object> recordSignData(SignDataParams signDataParams) {
Map<String,Object> data = new HashMap<>(4);
DecimalFormat decimalFormat = new DecimalFormat("0.00");
RecordSetTrans rst = new RecordSetTrans();
List<SignDataPO> list = buildSignData(signDataParams);
ResourceComInfo rcom = new ResourceComInfo();
int corePoolSize = 5;
int maxPoolSize = 10;
int batchSize = 200;
List<List<SignDataPO>> splittedLists = splitList(list,batchSize);
// 创建线程池
ExecutorService executorService = ThreadUtil.newExecutor(corePoolSize, maxPoolSize);
for (List<SignDataPO> subList : splittedLists) {
executorService.submit(() -> {
for (SignDataPO signDataPo : subList) {
String resourceId = String.valueOf(signDataPo.getResourceId());
Integer signMins = Util.getIntValue(signDataPo.getSignMins(),0);
double hours = (double) signMins / 60;
signDataPo.setCompany(Integer.parseInt(rcom.getSubCompanyID(resourceId)));
signDataPo.setDepartment(Integer.parseInt(rcom.getDepartmentID(resourceId)));
signDataPo.setJobTitle(Integer.parseInt(rcom.getJobTitle(resourceId)));
signDataPo.setSignHours(Double.parseDouble(decimalFormat.format(hours)));
signDataPo.setWorkHours(Double.parseDouble(decimalFormat.format(hours)));
}
});
}
// 关闭线程池
executorService.shutdown();
while (!executorService.isTerminated()) {
}
try {
rst.setAutoCommit(false);
if (CollectionUtils.isNotEmpty(signDataParams.getIds())) {
for (SignDataPO item : list) {
rst.executeUpdate("update uf_kqgs set qdrq = ?,qdsj = ?,qtrq = ?,qtsj = ?,dkgssc = ?,sjgssc = ? where id = ?",item.getSignInDate(),
item.getSignInTime(),item.getSignOutDate(),item.getSignOutTime(),item.getSignHours(),item.getWorkHours(),item.getId());
}
}else {
//同一考勤日期执行多次
rst.executeUpdate("delete from uf_kqgs where kqrq = ?",signDataParams.getAttendanceDate());
for (SignDataPO item : list) {
rst.executeUpdate("insert into uf_kqgs(formmodeid,xm,kqy,kqrq,zt,fb,bm,gw,qdrq,qdsj,qtrq,qtsj,dkgssc,sjgssc) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)",signDataParams.getFormModeId(),item.getResourceId(),
item.getAttendanceMonth(),item.getAttendanceDate(),item.getStatus(),item.getCompany(),item.getDepartment(),
item.getJobTitle(),item.getSignInDate(),item.getSignInTime(),item.getSignOutDate(),item.getSignOutTime(),
item.getSignHours(),item.getWorkHours());
}
}
rst.commit();
data.put("count",list.size());
}catch (Exception e) {
rst.rollback();
}
return data;
}
/**
*
* @param signDataParams
* @return
*/
private List<SignDataPO> buildSignData(SignDataParams signDataParams) {
RecordSet rs = new RecordSet();
List<SignDataPO> pos = new ArrayList<>();
String formatYearMonth = getFormatLocalDate(LocalDate.now(),MONTH_FORMATTER_PATTERN);
if (CollectionUtils.isNotEmpty(signDataParams.getIds())) {
String ids = StringUtils.join(signDataParams.getIds(),",");
rs.executeQuery("select u.id,u.xm,u.kqrq,u.kqy,k.signindate,k.signintime,k.signoutdate,k.signouttime,k.signMins from uf_kqgs u inner join kq_format_detail k" +
" on u.xm = k.resourceid and u.kqrq = k.kqdate and u.zt = 0 and u.id in ("+ids+")");
while (rs.next()) {
String signInTime = Util.null2String(rs.getString("signintime"));
String signOutTime = Util.null2String(rs.getString("signouttime"));
if (!"".equals(signInTime)){
signInTime = signInTime.substring(0,5);
}
if (!"".equals(signOutTime)){
signOutTime = signOutTime.substring(0,5);
}
SignDataPO build = SignDataPO.builder()
.id(Util.getIntValue(rs.getString("id")))
.resourceId(Util.getIntValue(rs.getString("xm")))
.attendanceMonth(Util.null2String(rs.getString("kqy")))
.attendanceDate(Util.null2String(rs.getString("kqrq")))
.signInDate(Util.null2String(rs.getString("signindate")))
.signInTime(signInTime)
.signOutDate(Util.null2String(rs.getString("signoutdate")))
.signOutTime(signOutTime)
.signMins(Util.null2String(rs.getString("signMins")))
.build();
pos.add(build);
}
}else {
rs.executeQuery("select resourceid,kqdate,signindate,signintime,signoutdate,signouttime,signMins from kq_format_detail where kqdate = ?",signDataParams.getAttendanceDate());
while (rs.next()) {
String signInTime = Util.null2String(rs.getString("signintime"));
String signOutTime = Util.null2String(rs.getString("signouttime"));
if (!"".equals(signInTime)){
signInTime = signInTime.substring(0,5);
}
if (!"".equals(signOutTime)){
signOutTime = signOutTime.substring(0,5);
}
SignDataPO build = SignDataPO.builder()
.resourceId(Util.getIntValue(rs.getString("resourceid")))
.attendanceMonth(formatYearMonth)
.attendanceDate(Util.null2String(rs.getString("kqdate")))
.status(0)
.signInDate(Util.null2String(rs.getString("signindate")))
.signInTime(signInTime)
.signOutDate(Util.null2String(rs.getString("signoutdate")))
.signOutTime(signOutTime)
.signMins(Util.null2String(rs.getString("signMins")))
.build();
pos.add(build);
}
}
return pos;
}
/**
* @Description:
* @Author: liang.cheng
* @Date: 2023/9/13 2:46 PM
* @param: [list, batchSize]
* @return: java.util.List<java.util.List<T>>
*/
private <T> List<List<T>> splitList(List<T> list, int batchSize) {
List<List<T>> splittedLists = new ArrayList<>();
for (int i = 0; i < list.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, list.size());
List<T> subList = list.subList(i, endIndex);
splittedLists.add(subList);
}
return splittedLists;
}
public String getFormatLocalDate(LocalDate localDate,DateTimeFormatter type) {
if (localDate == null) {
return StringUtils.EMPTY;
}
try {
return localDate.format(type);
} catch (Exception e) {
return StringUtils.EMPTY;
}
}
} }

@ -1,10 +1,52 @@
package com.engine.kqsolution.web; package com.engine.kqsolution.web;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.kqsolution.entity.SignDataParams;
import com.engine.kqsolution.service.SignDataSummaryService;
import com.engine.kqsolution.service.impl.SignDataSummaryServiceImpl;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
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 java.util.HashMap;
import java.util.Map;
/** /**
* @Author liang.cheng * @Author liang.cheng
* @Date 2023/9/18 11:43 AM * @Date 2023/9/18 11:43 AM
* @Description: TODO * @Description:
* @Version 1.0 * @Version 1.0
*/ */
public class SignDataSummaryAction { public class SignDataSummaryAction {
private SignDataSummaryService getService(User user) {
return ServiceUtil.getService(SignDataSummaryServiceImpl.class, user);
}
@POST
@Path("/recordSignData")
@Produces(MediaType.TEXT_PLAIN)
public String recordSignData(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SignDataParams signDataParams){
Map<String, Object> data = new HashMap<>(8);
try {
User user = HrmUserVarify.getUser(request, response);
data.putAll(getService(user).recordSignData(signDataParams));
data.put("status", true);
} catch (Exception e) {
data.put("status", false);
data.put("msg", "catch exception : " + e.getMessage());
}
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
}
} }

@ -1,10 +1,57 @@
package weaver.interfaces.kqsolution.crob; package weaver.interfaces.kqsolution.crob;
import com.engine.kqsolution.entity.SignDataParams;
import com.engine.kqsolution.service.impl.SignDataSummaryServiceImpl;
import weaver.interfaces.schedule.BaseCronJob;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
/** /**
* @Author liang.cheng * @Author liang.cheng
* @Date 2023/9/18 11:46 AM * @Date 2023/9/18 11:46 AM
* @Description: * @Description:
* @Version 1.0 * @Version 1.0
*/ */
public class SignDataSummaryCrob { public class SignDataSummaryCrob extends BaseCronJob {
public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private String attendanceDate;
private String formModeId;
public String getFormModeId() {
return formModeId;
}
public void setFormModeId(String formModeId) {
this.formModeId = formModeId;
}
public String getAttendanceDate() {
return attendanceDate;
}
public void setAttendanceDate(String attendanceDate) {
this.attendanceDate = attendanceDate;
}
@Override
public void execute() {
SignDataSummaryServiceImpl summaryService = new SignDataSummaryServiceImpl();
if (Objects.isNull(attendanceDate)) {
attendanceDate = summaryService.getFormatLocalDate(LocalDate.now().minusDays(1),DATE_FORMATTER);
}
SignDataParams build = SignDataParams.builder()
.formModeId(formModeId)
.attendanceDate(attendanceDate)
.build();
summaryService.recordSignData(build);
}
} }

Loading…
Cancel
Save