From 26806f9d260ad6356bdb03ead51c5be6b07a5563 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Mon, 7 Jul 2025 10:42:49 +0800 Subject: [PATCH] Initial commit --- .gitignore | 19 + README.md | 3 + secondev-wugang-dxfeng.gradle | 5 + .../AttendanceSchedulingArchiveAction.java | 85 +++ .../AttendanceSchedulingSubmitAction.java | 90 +++ .../AttendanceSchedulingController.java | 71 ++ .../entity/param/SummaryApprovalParam.java | 22 + .../entity/po/PreSchedulingDetailPo.java | 23 + .../attend/entity/po/SchedulingStatusPo.java | 70 ++ .../attend/entity/po/UfBaseField.java | 27 + .../mapper/AttendanceSchedulingMapper.java | 18 + .../attend/mapper/SchedulingStatusMapper.java | 21 + .../service/AttendanceSchedulingService.java | 35 + .../impl/AttendanceSchedulingServiceImpl.java | 635 ++++++++++++++++++ .../mapper/AttendanceSchedulingMapper.xml | 27 + .../mapper/SchedulingStatusMapper.xml | 38 ++ 16 files changed, 1189 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 secondev-wugang-dxfeng.gradle create mode 100644 src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingArchiveAction.java create mode 100644 src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingSubmitAction.java create mode 100644 src/main/java/com/weaver/seconddev/attend/controller/AttendanceSchedulingController.java create mode 100644 src/main/java/com/weaver/seconddev/attend/entity/param/SummaryApprovalParam.java create mode 100644 src/main/java/com/weaver/seconddev/attend/entity/po/PreSchedulingDetailPo.java create mode 100644 src/main/java/com/weaver/seconddev/attend/entity/po/SchedulingStatusPo.java create mode 100644 src/main/java/com/weaver/seconddev/attend/entity/po/UfBaseField.java create mode 100644 src/main/java/com/weaver/seconddev/attend/mapper/AttendanceSchedulingMapper.java create mode 100644 src/main/java/com/weaver/seconddev/attend/mapper/SchedulingStatusMapper.java create mode 100644 src/main/java/com/weaver/seconddev/attend/service/AttendanceSchedulingService.java create mode 100644 src/main/java/com/weaver/seconddev/attend/service/impl/AttendanceSchedulingServiceImpl.java create mode 100644 src/main/resources/mapper/AttendanceSchedulingMapper.xml create mode 100644 src/main/resources/mapper/SchedulingStatusMapper.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31e631b --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +.iml +/out/ +/.idea/ + + +HELP.md +target/ + +### IntelliJ IDEA ### +.idea + + +/src/test +/src/rebel.xml +/src/META-INF +### IntelliJ IDEA ### + +/log +/build/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ea6409 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# secondev-wugang-dxfeng + +华润武钢 \ No newline at end of file diff --git a/secondev-wugang-dxfeng.gradle b/secondev-wugang-dxfeng.gradle new file mode 100644 index 0000000..5c9b018 --- /dev/null +++ b/secondev-wugang-dxfeng.gradle @@ -0,0 +1,5 @@ +description = "子模块demo项目" + +dependencies { + // 子项目私有依赖添加 +} \ No newline at end of file diff --git a/src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingArchiveAction.java b/src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingArchiveAction.java new file mode 100644 index 0000000..77a6c48 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingArchiveAction.java @@ -0,0 +1,85 @@ +package com.weaver.seconddev.attend.action; + +import cn.hutool.core.convert.Convert; +import com.alibaba.fastjson.JSON; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.attend.entity.po.PreSchedulingDetailPo; +import com.weaver.seconddev.attend.entity.po.SchedulingStatusPo; +import com.weaver.seconddev.attend.mapper.AttendanceSchedulingMapper; +import com.weaver.seconddev.attend.mapper.SchedulingStatusMapper; +import com.weaver.workflow.common.entity.org.WeaUser; +import com.weaver.workflow.common.util.OrgUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2025/06/09 + * @version: 1.0 + */ +@Slf4j +@Service("attendanceSchedulingArchiveAction") +public class AttendanceSchedulingArchiveAction implements EsbServerlessRpcRemoteInterface { + @Autowired + AttendanceSchedulingMapper schedulingMapper; + + @Autowired + SchedulingStatusMapper schedulingStatusMapper; + + + @Override + public WeaResult> execute(Map params) { + try { + log.error("params=>20250610:{}", params); + + Long formDataId = Convert.toLong(params.get("requestId")); + Long employeeId = Convert.toLong(params.get("employeeId")); + log.error("employeeId:{}", employeeId); + WeaUser user = OrgUtil.getUser(employeeId); + String tenantKey = user.getTenantKey(); + + log.error("tenantKey:{}", tenantKey); + + List detailList = schedulingMapper.getDetailList(formDataId, tenantKey); + for (PreSchedulingDetailPo preSchedulingDetailPo : detailList) { + log.error("preSchedulingDetailPo===333>{}", preSchedulingDetailPo); + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(tenantKey, Long.valueOf(preSchedulingDetailPo.getEmployeeId()), preSchedulingDetailPo.getMonth()); + log.error("schedulingStatus===>{}", schedulingStatus); + + if (null != schedulingStatus) { + log.error("===数据更新==="); + // 更新状态 + SchedulingStatusPo.buildBaseFields(schedulingStatus, true, user); + // 审批中 + schedulingStatus.setStatus("2"); + schedulingStatusMapper.updateStatusById(schedulingStatus.getId(), "2"); + log.error("===数据更新完成===>{}", JSON.toJSONString(schedulingStatus)); + } else { + log.error("===数据插入==="); + // 插入数据 + schedulingStatus = new SchedulingStatusPo(); + // 审批中 + schedulingStatus.setStatus("2"); + schedulingStatus.setMonth(preSchedulingDetailPo.getMonth()); + schedulingStatus.setEmployeeId(preSchedulingDetailPo.getEmployeeId()); + SchedulingStatusPo.buildBaseFields(schedulingStatus, false, user); + schedulingStatusMapper.addSchedulingStatus(schedulingStatus); + log.error("===数据插入完成===>{}", JSON.toJSONString(schedulingStatus)); + } + + } + + log.error("formDataId:{}", formDataId); + return WeaResult.success(); + } catch (Throwable t) { + log.error("执行异常", t); + t.printStackTrace(); + return WeaResult.fail("操作失败: " + t.getMessage()); + } + } +} diff --git a/src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingSubmitAction.java b/src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingSubmitAction.java new file mode 100644 index 0000000..4a292d2 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/action/AttendanceSchedulingSubmitAction.java @@ -0,0 +1,90 @@ +package com.weaver.seconddev.attend.action; + +import cn.hutool.core.convert.Convert; +import com.alibaba.fastjson.JSON; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.attend.entity.po.PreSchedulingDetailPo; +import com.weaver.seconddev.attend.entity.po.SchedulingStatusPo; +import com.weaver.seconddev.attend.mapper.AttendanceSchedulingMapper; +import com.weaver.seconddev.attend.mapper.SchedulingStatusMapper; +import com.weaver.workflow.common.entity.org.WeaUser; +import com.weaver.workflow.common.util.OrgUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2025/06/09 + * @version: 1.0 + */ +@Slf4j +@Service("attendanceSchedulingSubmitAction") +public class AttendanceSchedulingSubmitAction implements EsbServerlessRpcRemoteInterface { + @Autowired + AttendanceSchedulingMapper schedulingMapper; + + @Autowired + SchedulingStatusMapper schedulingStatusMapper; + + @Override + public WeaResult> execute(Map params) { + try { + log.error("params=>20250610:{}", params); + + Long formDataId = Convert.toLong(params.get("requestId")); + Long employeeId = Convert.toLong(params.get("employeeId")); + String status = Convert.toStr(params.get("status")); + log.error("employeeId:{}", employeeId); + WeaUser user = OrgUtil.getUser(employeeId); + String tenantKey1 = user.getTenantKey(); + //String tenantKey = "tva1v1at2z"; + String tenantKey = user.getTenantKey(); + + + + log.error("tenantKey:{}", tenantKey); + log.error("tenantKey1:{}", tenantKey1); + + List detailList = schedulingMapper.getDetailList(formDataId, tenantKey); + for (PreSchedulingDetailPo preSchedulingDetailPo : detailList) { + log.error("preSchedulingDetailPo===333>{}", preSchedulingDetailPo); + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(tenantKey, Long.valueOf(preSchedulingDetailPo.getEmployeeId()), preSchedulingDetailPo.getMonth()); + log.error("schedulingStatus===>{}", schedulingStatus); + + if (null != schedulingStatus) { + log.error("===数据更新==="); + // 更新状态 + SchedulingStatusPo.buildBaseFields(schedulingStatus, true, user); + // 审批中 + schedulingStatus.setStatus(status); + schedulingStatusMapper.updateStatusById(schedulingStatus.getId(), status); + log.error("===数据更新完成===>{}", JSON.toJSONString(schedulingStatus)); + } else { + log.error("===数据插入==="); + // 插入数据 + schedulingStatus = new SchedulingStatusPo(); + // 审批中 + schedulingStatus.setStatus(status); + schedulingStatus.setMonth(preSchedulingDetailPo.getMonth()); + schedulingStatus.setEmployeeId(preSchedulingDetailPo.getEmployeeId()); + SchedulingStatusPo.buildBaseFields(schedulingStatus, false, user); + schedulingStatusMapper.addSchedulingStatus(schedulingStatus); + log.error("===数据插入完成===>{}", JSON.toJSONString(schedulingStatus)); + + } + + } + log.error("formDataId:{}", formDataId); + return WeaResult.success(); + } catch (Throwable t) { + log.error("执行异常", t); + t.printStackTrace(); + return WeaResult.fail("操作失败: " + t.getMessage()); + } + } +} diff --git a/src/main/java/com/weaver/seconddev/attend/controller/AttendanceSchedulingController.java b/src/main/java/com/weaver/seconddev/attend/controller/AttendanceSchedulingController.java new file mode 100644 index 0000000..8987427 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/controller/AttendanceSchedulingController.java @@ -0,0 +1,71 @@ +package com.weaver.seconddev.attend.controller; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.attend.entity.po.SchedulingStatusPo; +import com.weaver.seconddev.attend.service.AttendanceSchedulingService; +import com.weaver.workflow.core.api.rest.flow.entity.operate.WfcRequestOperationResultDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.UnsupportedEncodingException; +import java.util.Map; + + +/** + * @author:dxfeng + * @createTime: 2025/06/05 + * @version: 1.0 + */ +@Slf4j +@RestController +@RequestMapping("/api/secondev/attendanceScheduling") +@WeaPermission(publicPermission = true) +public class AttendanceSchedulingController { + + @Autowired + AttendanceSchedulingService attendanceSchedulingService; + + @PostMapping("/dealSaveParams") + public WeaResult dealSaveParams(@RequestBody Map params) { + return attendanceSchedulingService.dealSaveParams(params); + } + + @PostMapping("/saveChoseFirstShiftSec") + public String saveChoseFirstShiftSec(@RequestHeader Map header, @RequestBody Map body) { + return attendanceSchedulingService.saveChoseFirstShiftSec(header, body); + } + + @PostMapping("/saveSheet") + public String saveSheet(@RequestHeader Map header, @RequestBody Map body) { + return attendanceSchedulingService.saveSheet(header, body); + } + + + @PostMapping("/createWorkFlow") + private WeaResult createWorkFlow(@RequestBody Map params) throws UnsupportedEncodingException { + return attendanceSchedulingService.createFlowV2(params); + } + + @PostMapping("/createSummaryApprovalFlow") + private WeaResult createSummaryApprovalFlow(@RequestBody Map params) throws UnsupportedEncodingException { + return attendanceSchedulingService.createSummaryApprovalFlow(params); + } + + @PostMapping("/updateAttendStatus") + private WeaResult> updateAttendStatus(@RequestBody Map params) throws UnsupportedEncodingException { + return attendanceSchedulingService.updateAttendStatus(params); + } + + //@PostMapping("/batchGetAttendStatus") + //private WeaResult> batchGetAttendStatus(@RequestBody Map params) { + // return attendanceSchedulingService.batchGetAttendStatus(params); + //} + + @GetMapping("/getAttendStatus") + private WeaResult getAttendStatus(@RequestParam("empId") String empId, @RequestParam("month") String month) { + return attendanceSchedulingService.getAttendStatus(empId, month); + } + +} diff --git a/src/main/java/com/weaver/seconddev/attend/entity/param/SummaryApprovalParam.java b/src/main/java/com/weaver/seconddev/attend/entity/param/SummaryApprovalParam.java new file mode 100644 index 0000000..d488fbf --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/entity/param/SummaryApprovalParam.java @@ -0,0 +1,22 @@ +package com.weaver.seconddev.attend.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2025/06/13 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SummaryApprovalParam { + private String fieldName; + private String fieldKey; + private Long fieldId; + private String rowKey; +} diff --git a/src/main/java/com/weaver/seconddev/attend/entity/po/PreSchedulingDetailPo.java b/src/main/java/com/weaver/seconddev/attend/entity/po/PreSchedulingDetailPo.java new file mode 100644 index 0000000..14dec82 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/entity/po/PreSchedulingDetailPo.java @@ -0,0 +1,23 @@ +package com.weaver.seconddev.attend.entity.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2025/06/09 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class PreSchedulingDetailPo { + private String id; + private String formDataId; + private String flowId; + private String employeeId; + private String month; +} diff --git a/src/main/java/com/weaver/seconddev/attend/entity/po/SchedulingStatusPo.java b/src/main/java/com/weaver/seconddev/attend/entity/po/SchedulingStatusPo.java new file mode 100644 index 0000000..29ccf64 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/entity/po/SchedulingStatusPo.java @@ -0,0 +1,70 @@ +package com.weaver.seconddev.attend.entity.po; + +import com.weaver.common.distribution.genid.IdGenerator; +import com.weaver.teams.security.user.User; +import com.weaver.workflow.common.entity.org.WeaUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * @author:dxfeng + * @createTime: 2025/06/10 + * @version: 1.0 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class SchedulingStatusPo extends UfBaseField { + private String month; + private String employeeId; + private String status; + + + /** + * 构建基础字段 + * + * @param schedulingStatus + * @param isUpdate + * @param user + */ + public static void buildBaseFields(SchedulingStatusPo schedulingStatus, boolean isUpdate, WeaUser user) { + if (isUpdate) { + schedulingStatus.setUpdater(user.getUserId()); + schedulingStatus.setUpdate_time(new Date()); + } else { + schedulingStatus.setId(IdGenerator.generate()); + schedulingStatus.setIs_flow("0"); + schedulingStatus.setFlow_id(""); + schedulingStatus.setData_status("1"); + schedulingStatus.setData_index("0"); + schedulingStatus.setData_index("0"); + schedulingStatus.setCreator(user.getUserId()); + schedulingStatus.setCreate_time(new Date()); + schedulingStatus.setDelete_type("0"); + schedulingStatus.setFt_status("0"); + schedulingStatus.setForm_data_id(schedulingStatus.getId()); + schedulingStatus.setTenant_key(user.getTenantKey()); + } + } + + public static void buildBaseFields(SchedulingStatusPo schedulingStatus, boolean isUpdate, User user) { + if (isUpdate) { + schedulingStatus.setUpdater(user.getUserId()); + schedulingStatus.setUpdate_time(new Date()); + } else { + schedulingStatus.setId(IdGenerator.generate()); + schedulingStatus.setIs_flow("0"); + schedulingStatus.setFlow_id(""); + schedulingStatus.setData_status("1"); + schedulingStatus.setData_index("0"); + schedulingStatus.setData_index("0"); + schedulingStatus.setCreator(user.getUserId()); + schedulingStatus.setCreate_time(new Date()); + schedulingStatus.setDelete_type("0"); + schedulingStatus.setFt_status("0"); + schedulingStatus.setForm_data_id(schedulingStatus.getId()); + schedulingStatus.setTenant_key(user.getTenantKey()); + } + } +} diff --git a/src/main/java/com/weaver/seconddev/attend/entity/po/UfBaseField.java b/src/main/java/com/weaver/seconddev/attend/entity/po/UfBaseField.java new file mode 100644 index 0000000..463eb28 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/entity/po/UfBaseField.java @@ -0,0 +1,27 @@ +package com.weaver.seconddev.attend.entity.po; + +import lombok.Data; + +import java.util.Date; + +/** + * @author:dxfeng + * @createTime: 2025/06/10 + * @version: 1.0 + */ +@Data +public class UfBaseField { + private Long id; + private String is_flow; + private String flow_id; + private String data_status; + private String data_index; + private Long creator; + private Date create_time; + private Long updater; + private Date update_time; + private String delete_type; + private String ft_status; + private Long form_data_id; + private String tenant_key; +} diff --git a/src/main/java/com/weaver/seconddev/attend/mapper/AttendanceSchedulingMapper.java b/src/main/java/com/weaver/seconddev/attend/mapper/AttendanceSchedulingMapper.java new file mode 100644 index 0000000..4b41a1f --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/mapper/AttendanceSchedulingMapper.java @@ -0,0 +1,18 @@ +package com.weaver.seconddev.attend.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.weaver.seconddev.attend.entity.po.PreSchedulingDetailPo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author:dxfeng + * @createTime: 2025/06/09 + * @version: 1.0 + */ +@Mapper +public interface AttendanceSchedulingMapper extends BaseMapper { + List getDetailList(@Param("formDataId") Long formDataId, @Param("tenantKey") String tenantKey); +} diff --git a/src/main/java/com/weaver/seconddev/attend/mapper/SchedulingStatusMapper.java b/src/main/java/com/weaver/seconddev/attend/mapper/SchedulingStatusMapper.java new file mode 100644 index 0000000..fa69943 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/mapper/SchedulingStatusMapper.java @@ -0,0 +1,21 @@ +package com.weaver.seconddev.attend.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.weaver.seconddev.attend.entity.po.SchedulingStatusPo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author:dxfeng + * @createTime: 2025/06/10 + * @version: 1.0 + */ +@Mapper +public interface SchedulingStatusMapper extends BaseMapper { + + SchedulingStatusPo getByCondition(@Param("tenantKey") String tenantKey,@Param("employeeId") Long employeeId,@Param("month") String month); + + void updateStatusById(@Param("id") Long id,@Param("status") String status); + + void addSchedulingStatus(SchedulingStatusPo schedulingStatusPo); +} diff --git a/src/main/java/com/weaver/seconddev/attend/service/AttendanceSchedulingService.java b/src/main/java/com/weaver/seconddev/attend/service/AttendanceSchedulingService.java new file mode 100644 index 0000000..39d1588 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/service/AttendanceSchedulingService.java @@ -0,0 +1,35 @@ +package com.weaver.seconddev.attend.service; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.attend.entity.po.SchedulingStatusPo; +import com.weaver.workflow.core.api.rest.flow.entity.operate.WfcRequestOperationResultDto; + +import java.io.UnsupportedEncodingException; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2025/06/06 + * @version: 1.0 + */ +public interface AttendanceSchedulingService { + WeaResult createFlowV2(Map params) throws UnsupportedEncodingException; + + WeaResult> updateAttendStatus(Map params); + + WeaResult getAttendStatus(String empId, String month); + + WeaResult> batchGetAttendStatus(Map params); + + WeaResult dealSaveParams(Map params); + + String saveChoseFirstShiftSec(Map header,Map body); + + String saveSheet(Map header,Map body); + + + WeaResult createSummaryApprovalFlow(Map params) throws UnsupportedEncodingException; + + + +} diff --git a/src/main/java/com/weaver/seconddev/attend/service/impl/AttendanceSchedulingServiceImpl.java b/src/main/java/com/weaver/seconddev/attend/service/impl/AttendanceSchedulingServiceImpl.java new file mode 100644 index 0000000..2271d4c --- /dev/null +++ b/src/main/java/com/weaver/seconddev/attend/service/impl/AttendanceSchedulingServiceImpl.java @@ -0,0 +1,635 @@ +package com.weaver.seconddev.attend.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.batch.excel.CellData; +import com.weaver.common.batch.excel.ExcelUtil; +import com.weaver.common.batch.excel.RowData; +import com.weaver.common.form.dto.data.FormDataDetailDto; +import com.weaver.common.form.dto.data.FormDataDto; +import com.weaver.common.form.dto.data.FormDataDtoParam; +import com.weaver.common.form.dto.data.FormDataOptionDto; +import com.weaver.common.form.metadata.ModuleSource; +import com.weaver.common.hrm.dao.HrmCommonEmployeeDao; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.seconddev.attend.entity.param.SummaryApprovalParam; +import com.weaver.seconddev.attend.entity.po.SchedulingStatusPo; +import com.weaver.seconddev.attend.mapper.AttendanceSchedulingMapper; +import com.weaver.seconddev.attend.mapper.SchedulingStatusMapper; +import com.weaver.seconddev.attend.service.AttendanceSchedulingService; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.teams.security.context.UserContext; +import com.weaver.teams.security.session.TeamsSession; +import com.weaver.teams.security.user.User; +import com.weaver.workflow.core.api.rest.flow.entity.operate.WfcRequestOperateParamDataEntity; +import com.weaver.workflow.core.api.rest.flow.entity.operate.WfcRequestOperationResultDto; +import com.weaver.workflow.core.api.rest.publicapi.WfcRequestOperateRest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Sheet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.*; + +/** + * @author:dxfeng + * @createTime: 2025/06/06 + * @version: 1.0 + */ +@Slf4j +@Service +public class AttendanceSchedulingServiceImpl implements AttendanceSchedulingService { + + @RpcReference + private WfcRequestOperateRest wfcRequestOperateRest; + + @Autowired + AttendanceSchedulingMapper schedulingMapper; + + @Autowired + SchedulingStatusMapper schedulingStatusMapper; + + @Autowired + HrmCommonEmployeeDao hrmCommonEmployeeDao; + + @Autowired + private TeamsSession session; + + @Override + public WeaResult createFlowV2(Map params) throws UnsupportedEncodingException { + String workflowId = params.get("workflowId"); + String formId = params.get("formId"); + String detailData = params.get("detailData"); + String month = params.get("month"); + + WfcRequestOperateParamDataEntity wfcRequestOperateParamDataEntity = new WfcRequestOperateParamDataEntity(); + wfcRequestOperateParamDataEntity.setWorkflowId(Long.parseLong(workflowId)); + //String formId = "1134268904057012233"; + Map mainFieldsMap = new HashMap<>(); + mainFieldsMap.put("ssks", "1142076308540252161"); + mainFieldsMap.put("ssgs", "1142076308540252162"); + mainFieldsMap.put("tjrq", "1142076308540252163"); + mainFieldsMap.put("tjr", "1142076308540252164"); + + Map detailFieldsMap = new HashMap<>(); + detailFieldsMap.put("ygid", "1142426185342279681"); + detailFieldsMap.put("ssyf", "1142426185342279682"); + detailFieldsMap.put("ygxm", "1142076746702413826"); + detailFieldsMap.put("gw", "1142076746702413827"); + // 排班 + detailFieldsMap.put("1", "1142076746702413828"); + detailFieldsMap.put("2", "1142076746702413829"); + detailFieldsMap.put("3", "1142076772472217609"); + detailFieldsMap.put("4", "1142076772472217610"); + detailFieldsMap.put("5", "1142076772472217611"); + detailFieldsMap.put("6", "1142076772472217612"); + detailFieldsMap.put("7", "1142076772472217613"); + detailFieldsMap.put("8", "1142076978731311105"); + detailFieldsMap.put("9", "1142076978731311106"); + detailFieldsMap.put("10", "1142076978731311107"); + detailFieldsMap.put("11", "1142076978731311108"); + detailFieldsMap.put("12", "1142076978731311109"); + detailFieldsMap.put("13", "1142077030052814857"); + detailFieldsMap.put("14", "1142077030052814858"); + detailFieldsMap.put("15", "1142077030052814859"); + detailFieldsMap.put("16", "1142077030052814860"); + detailFieldsMap.put("17", "1142077030052814861"); + detailFieldsMap.put("18", "1142077030052814862"); + detailFieldsMap.put("19", "1142077030052814863"); + detailFieldsMap.put("20", "1142077030052814864"); + detailFieldsMap.put("21", "1142077030052814865"); + detailFieldsMap.put("22", "1142077030052814866"); + detailFieldsMap.put("23", "1142077094527655943"); + detailFieldsMap.put("24", "1142077094527655944"); + detailFieldsMap.put("25", "1142077094527655945"); + detailFieldsMap.put("26", "1142077094527655946"); + detailFieldsMap.put("27", "1142077094527655947"); + detailFieldsMap.put("28", "1142077098847789057"); + detailFieldsMap.put("29", "1142077098847789058"); + detailFieldsMap.put("30", "1142077098847789059"); + detailFieldsMap.put("31", "1142077098847789060"); + + + //表单字段集合 + List formDataDetailDtos = new ArrayList<>(); + + // 构建明细表数据 + String decode = URLDecoder.decode(detailData, "UTF-8"); + User currentUser = UserContext.getCurrentUser(); + + JSONArray detailDataArray = JSON.parseArray(decode); + for (int rorIndex = 0; rorIndex < detailDataArray.size(); rorIndex++) { + int rowNum = rorIndex + 1; + JSONObject detailRow = detailDataArray.getJSONObject(rorIndex); + String empId = detailRow.getString("empId"); + String employee = detailRow.getString("employee"); + String jobNo = detailRow.getString("jobNo"); + String position = detailRow.getString("position"); + + // TODO 判断数据是否可以提交 + SchedulingStatusPo byCondition = schedulingStatusMapper.getByCondition(currentUser.getTenantKey(), Long.valueOf(empId), month); + if (byCondition != null && ("1".equals(byCondition.getStatus()) || "2".equals(byCondition.getStatus()))) { + log.error("SchedulingStatusPo===跳过该条数据>{}", byCondition); + continue; + } + + + FormDataDetailDto empIdDetailDto = new FormDataDetailDto(); + empIdDetailDto.setFieldId(Long.valueOf(detailFieldsMap.get("ygid"))); + empIdDetailDto.setDataIndex((long) rowNum); + empIdDetailDto.setContent(empId); + formDataDetailDtos.add(empIdDetailDto); + + FormDataDetailDto employeeDetailDto = new FormDataDetailDto(); + employeeDetailDto.setFieldId(Long.valueOf(detailFieldsMap.get("ygxm"))); + employeeDetailDto.setDataIndex((long) rowNum); + employeeDetailDto.setContent(employee); + formDataDetailDtos.add(employeeDetailDto); + + // 岗位 + FormDataDetailDto jobNoDetailDto = new FormDataDetailDto(); + jobNoDetailDto.setFieldId(Long.valueOf(detailFieldsMap.get("gw"))); + jobNoDetailDto.setDataIndex((long) rowNum); + jobNoDetailDto.setContent(position); + formDataDetailDtos.add(jobNoDetailDto); + + // 所属月份 + FormDataDetailDto monthDetailDto = new FormDataDetailDto(); + monthDetailDto.setFieldId(Long.valueOf(detailFieldsMap.get("ssyf"))); + monthDetailDto.setDataIndex((long) rowNum); + monthDetailDto.setContent(month); + formDataDetailDtos.add(monthDetailDto); + + + // 处理班次字段 + JSONObject shifts = detailRow.getJSONObject("shifts"); + for (int i = 1; i <= 31; i++) { + FormDataDetailDto shiftDetailDto = new FormDataDetailDto(); + // 对应字段标识 + shiftDetailDto.setFieldId(Long.valueOf(detailFieldsMap.get(String.valueOf(i)))); + shiftDetailDto.setDataIndex((long) rowNum); + JSONArray shift = shifts.getJSONArray(String.valueOf(i)); + List shiftValueList = new ArrayList<>(); + List dataOptions = new ArrayList<>(); + for (Object shiftObj : shift) { + JSONObject shiftObjJson = (JSONObject) shiftObj; + log.error("shiftObjJson==" + JSON.toJSONString(shiftObjJson)); + FormDataOptionDto formDataOptionDto = new FormDataOptionDto(); + formDataOptionDto.setOptionId(shiftObjJson.getString("id")); + formDataOptionDto.setContent(shiftObjJson.getString("name")); + //formDataOptionDto.setContent(shiftObjJson.getString("id")); + formDataOptionDto.setType(ModuleSource.attendShift); + String shiftValue = shiftObjJson.getString("id"); + shiftValueList.add(shiftValue); + dataOptions.add(formDataOptionDto); + } + shiftDetailDto.setContent(StringUtils.join(shiftValueList, ",")); + //shiftDetailDto.setDataOptions(dataOptions); + log.error("[" + i + "]shiftDetailDto==" + JSON.toJSONString(shiftDetailDto)); + formDataDetailDtos.add(shiftDetailDto); + } + log.error("formDataDetailDtos==" + JSON.toJSONString(formDataDetailDtos)); + + // 插入数据到考勤排班状态表 + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(currentUser.getTenantKey(), Long.valueOf(empId), month); + log.error("schedulingStatus===>{}", schedulingStatus); + + if (null != schedulingStatus) { + log.error("===数据更新==="); + // 更新状态 + SchedulingStatusPo.buildBaseFields(schedulingStatus, true, currentUser); + // 审批中 + schedulingStatus.setStatus("0"); + schedulingStatusMapper.updateStatusById(schedulingStatus.getId(), "0"); + log.error("===数据更新完成===>{}", JSON.toJSONString(schedulingStatus)); + } else { + log.error("===数据插入==="); + // 插入数据 + schedulingStatus = new SchedulingStatusPo(); + // 审批中 + schedulingStatus.setStatus("0"); + schedulingStatus.setMonth(month); + schedulingStatus.setEmployeeId(empId); + SchedulingStatusPo.buildBaseFields(schedulingStatus, false, currentUser); + schedulingStatusMapper.addSchedulingStatus(schedulingStatus); + log.error("===数据插入完成===>{}", JSON.toJSONString(schedulingStatus)); + } + + } + + if (CollectionUtils.isEmpty(formDataDetailDtos)) { + return WeaResult.fail("审批中、已审核的无法提交审核"); + } + + + //表单数据 + FormDataDto formDataDto = new FormDataDto(); + formDataDto.setFormId(Long.valueOf(formId)); + formDataDto.setDataDetails(formDataDetailDtos); + + //FormDataDtoParam formDataDtoParam = new FormDataDtoParam(); + //formDataDtoParam.setFormDataDtos(Arrays.asList(formDataDto)); + //formDataDtoParam.setFormId(Long.valueOf(formId)); + // + //WeaResult flow = + // wfcRequestOperateRest.createFlowV2(wfcRequestOperateParamDataEntity, UserContext.getCurrentUser(), formDataDtoParam); + + WeaResult flow = + wfcRequestOperateRest.createFlow(wfcRequestOperateParamDataEntity, UserContext.getCurrentUser(), formDataDto); + return flow; + + } + + @Override + public WeaResult> updateAttendStatus(Map params) { + try { + String detailData = params.get("detailData"); + String month = params.get("month"); + String decode = URLDecoder.decode(detailData, "UTF-8"); + User currentUser = UserContext.getCurrentUser(); + + JSONArray detailDataArray = JSON.parseArray(decode); + for (int rorIndex = 0; rorIndex < detailDataArray.size(); rorIndex++) { + JSONObject detailRow = detailDataArray.getJSONObject(rorIndex); + String empId = detailRow.getString("empId"); + // 插入数据到考勤排班状态表 + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(currentUser.getTenantKey(), Long.valueOf(empId), month); + log.error("schedulingStatus===>{}", schedulingStatus); + + if (null != schedulingStatus) { + log.error("===数据更新==="); + // 更新状态 + SchedulingStatusPo.buildBaseFields(schedulingStatus, true, currentUser); + // 审批中 + schedulingStatus.setStatus("0"); + schedulingStatusMapper.updateStatusById(schedulingStatus.getId(), "3"); + log.error("===数据更新完成===>{}", JSON.toJSONString(schedulingStatus)); + } else { + log.error("===数据插入==="); + // 插入数据 + schedulingStatus = new SchedulingStatusPo(); + // 审批中 + schedulingStatus.setStatus("3"); + schedulingStatus.setMonth(month); + schedulingStatus.setEmployeeId(empId); + SchedulingStatusPo.buildBaseFields(schedulingStatus, false, currentUser); + schedulingStatusMapper.addSchedulingStatus(schedulingStatus); + log.error("===数据插入完成===>{}", JSON.toJSONString(schedulingStatus)); + } + } + return null; + } catch (Exception e) { + e.printStackTrace(); + return WeaResult.fail(e.getMessage()); + } + } + + @Override + public WeaResult getAttendStatus(String empId, String month) { + User currentUser = UserContext.getCurrentUser(); + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(currentUser.getTenantKey(), Long.valueOf(empId), month); + return WeaResult.success(schedulingStatus); + } + + @Override + public WeaResult> batchGetAttendStatus(Map params) { + String empIds = Convert.toStr(params.get("empIds")); + String month = Convert.toStr(params.get("month")); + Map returnMap = new HashMap<>(); + String[] split = empIds.split(","); + for (String empId : split) { + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(UserContext.getCurrentUser().getTenantKey(), Long.valueOf(empId), month); + returnMap.put(empId, schedulingStatus.getStatus()); + } + return WeaResult.success(returnMap); + } + + @Override + public WeaResult dealSaveParams(Map params) { + String selectedObjMap = Convert.toStr(params.get("selectedObjMap")); + String month = Convert.toStr(params.get("month")); + if (StringUtils.isBlank(selectedObjMap)) { + return WeaResult.success("{}"); + } + + // String转Map + Map selectedObjMapMap = JSON.parseObject(selectedObjMap, Map.class); + log.error("selectedObjMapMap===>{}", selectedObjMapMap); + Set keySet = selectedObjMapMap.keySet(); + Iterator iterator = keySet.iterator(); + while (iterator.hasNext()) { + String key = iterator.next(); + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(UserContext.getCurrentUser().getTenantKey(), Long.valueOf(key), month); + if (schedulingStatus != null && ("1".equals(schedulingStatus.getStatus()) || "2".equals(schedulingStatus.getStatus()))) { + log.error("schedulingStatus===保存时不处理该条数据===>{}", schedulingStatus); + iterator.remove(); + } + } + + + return WeaResult.success(JSON.toJSONString(selectedObjMapMap)); + } + + @Override + public String saveChoseFirstShiftSec(Map header, Map body) { + log.error("======saveChoseFirstShiftSec========="); + String result = ""; + + //1、before callApi + //在调用接口前 可以做一些前置操作 + + + //2、调用实际api + String origin = header.get("origin"); + String realUrl = String.valueOf(body.get("realUrl")); + String url = origin + realUrl; + log.error("url===" + url); + + // 处理body参数 + + String bodyStr = JSON.toJSONString(body); + JSONObject jsonObject = JSONObject.parseObject(bodyStr); + String month = jsonObject.getString("month"); + String selectedObjMap = jsonObject.getString("selectedObjMap"); + + Map selectedObjMapMap = JSON.parseObject(selectedObjMap, Map.class); + Set keySet = selectedObjMapMap.keySet(); + String tenantKey = UserContext.getCurrentUser().getTenantKey(); + // 使用迭代器安全删除元素 + Iterator iterator = keySet.iterator(); + while (iterator.hasNext()) { + String key = iterator.next(); + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(tenantKey, Long.valueOf(key), month); + if (schedulingStatus != null && ("1".equals(schedulingStatus.getStatus()) || "2".equals(schedulingStatus.getStatus()))) { + log.error("schedulingStatus===保存时不处理该条数据===>{}", schedulingStatus); + iterator.remove(); + } + } + + if (selectedObjMapMap.size() == 0) { + WeaResult fail = WeaResult.fail("审批中、已审核状态下无法修改"); + return JSON.toJSONString(fail); + } + // 更新请求参数 + jsonObject.put("selectedObjMap", selectedObjMapMap); + + log.error("bodyStr===" + bodyStr); + String resultStr = HttpRequest.post(url).headerMap(header, true).body(jsonObject.toJSONString()).execute().body(); + log.error("resultStr===" + resultStr); + //3、after callApi + + + JSONObject resultObj = JSON.parseObject(resultStr); + log.error("resultObj===" + resultObj); + return JSON.toJSONString(resultObj); + } + + @Override + public String saveSheet(Map header, Map body) { + + log.error("======saveSheet========="); + String result = ""; + + //1、before callApi + //在调用接口前 可以做一些前置操作 + + //2、调用实际api + String origin = header.get("origin"); + String realUrl = String.valueOf(body.get("realUrl")); + String url = origin + realUrl; + log.error("url===" + url); + + String bodyStr = JSON.toJSONString(body); + JSONObject jsonObject = JSONObject.parseObject(bodyStr); + String month = jsonObject.getString("month"); + + // 处理body参数 + byte[] data = session.getAttribute("excel"); + InputStream inputStream = new ByteArrayInputStream(data); + ExcelUtil.parse(inputStream); + Sheet sheet = ExcelUtil.getSheet(0); + List rowDatas = ExcelUtil.getRowDatas(sheet, 0, ExcelUtil.MAX_IMPORT_ROW + 1); + if (CollectionUtils.isNotEmpty(rowDatas) && rowDatas.size() > 2) { + RowData columRowaData = rowDatas.get(2); + List cells = columRowaData.getCells(); + int empNameIndex = -1; + int workCodeIndex = -1; + for (CellData cell : cells) { + log.error((String) cell.getValue()); + if ("工号".equals(cell.getValue())) { + log.error("工号所在列===" + JSON.toJSONString(cell)); + workCodeIndex = cell.getIndex(); + } else if ("人员".equals(cell.getValue())) { + log.error("人员所在列===" + JSON.toJSONString(cell)); + empNameIndex = cell.getIndex(); + } + } + + if (workCodeIndex == -1) { + WeaResult fail = WeaResult.fail("未获取到[工号]列,请调整模板后再次尝试"); + return JSON.toJSONString(fail); + } + + String tenantKey = UserContext.getCurrentUser().getTenantKey(); + for (int i = 3; i < rowDatas.size(); i++) { + RowData rowData = rowDatas.get(i); + List dataCells = rowData.getCells(); + String empName = dataCells.get(empNameIndex).getValue().toString(); + String workCode = dataCells.get(workCodeIndex).getValue().toString(); + log.error("empName===" + empName); + log.error("workCode===" + workCode); + + Long employeeId; + if (StringUtils.isNotBlank(workCode) && !"-".equals(workCode)) { + List byJobNums = hrmCommonEmployeeDao.getByJobNums(Collections.singletonList(workCode), tenantKey); + if (CollectionUtils.isEmpty(byJobNums)) { + WeaResult fail = WeaResult.fail("第" + (i + 1) + "行未查询到对应人员,工号[" + workCode + "]"); + return JSON.toJSONString(fail); + } + + if (byJobNums.size() > 1) { + WeaResult fail = WeaResult.fail("第" + (i + 1) + "行工号不唯一,工号[" + workCode + "]"); + return JSON.toJSONString(fail); + } + SimpleEmployee simpleEmployee = byJobNums.get(0); + employeeId = simpleEmployee.getEmployeeId(); + } else { + List byUserNames = hrmCommonEmployeeDao.getByUserNames(Collections.singletonList(empName), tenantKey); + if (CollectionUtils.isEmpty(byUserNames)) { + WeaResult fail = WeaResult.fail("第" + (i + 1) + "行未查询到对应人员,人员[" + empName + "]"); + return JSON.toJSONString(fail); + } + + if (byUserNames.size() > 1) { + WeaResult fail = WeaResult.fail("第" + (i + 1) + "行人员不唯一,人员[" + empName + "]"); + return JSON.toJSONString(fail); + } + SimpleEmployee simpleEmployee = byUserNames.get(0); + employeeId = simpleEmployee.getEmployeeId(); + } + + + SchedulingStatusPo schedulingStatus = schedulingStatusMapper.getByCondition(tenantKey, employeeId, month); + if (schedulingStatus != null) { + if ("1".equals(schedulingStatus.getStatus())) { + WeaResult fail = WeaResult.fail("第" + (i + 1) + "行排班审核中,无法修改"); + return JSON.toJSONString(fail); + } else if ("2".equals(schedulingStatus.getStatus())) { + WeaResult fail = WeaResult.fail("第" + (i + 1) + "行排班已审核,无法修改"); + return JSON.toJSONString(fail); + } + } + } + } + + + log.error("bodyStr===" + bodyStr); + String resultStr = HttpRequest.post(url).headerMap(header, true).body(jsonObject.toJSONString()).execute().body(); + log.error("resultStr===" + resultStr); + //3、after callApi + + JSONObject resultObj = JSON.parseObject(resultStr); + log.error("resultObj===" + resultObj); + return JSON.toJSONString(resultObj); + + } + + @Override + public WeaResult createSummaryApprovalFlow(Map params) throws UnsupportedEncodingException { + String workflowId = params.get("workflowId"); + String formId = params.get("formId"); + String detailData = params.get("detailData"); + String month = params.get("month"); + + WfcRequestOperateParamDataEntity wfcRequestOperateParamDataEntity = new WfcRequestOperateParamDataEntity(); + wfcRequestOperateParamDataEntity.setWorkflowId(Long.parseLong(workflowId)); + Map mainFieldsMap = new HashMap<>(); + // 考勤月份 + mainFieldsMap.put("kqyf", "1144947056082575373"); + + List summaryApprovalParams = new ArrayList<>(); + summaryApprovalParams.add(new SummaryApprovalParam("姓名", "xm", 1144947283791339524L, "empId")); + summaryApprovalParams.add(new SummaryApprovalParam("工号", "gh", 1144947283791339526L, "jobNum")); + summaryApprovalParams.add(new SummaryApprovalParam("分部", "fb", 1144947532958162959L, "subcompanyId")); + summaryApprovalParams.add(new SummaryApprovalParam("部门", "bm", 1144947532958162960L, "deptId")); + summaryApprovalParams.add(new SummaryApprovalParam("岗位", "gw", 1144947532958162961L, "positionId")); + summaryApprovalParams.add(new SummaryApprovalParam("安全级别", "aqjb", 1144947532958162962L, "seclevel")); + summaryApprovalParams.add(new SummaryApprovalParam("入职时间", "rzsj", 1144947532958162963L, "workdate")); + summaryApprovalParams.add(new SummaryApprovalParam("应出勤工时", "ycqgs", 1144947988124033028L, "working")); + summaryApprovalParams.add(new SummaryApprovalParam("出勤工时", "cqgs", 1144947988124033029L, "actual")); + summaryApprovalParams.add(new SummaryApprovalParam("出勤天数(打卡)", "cqtsdk", 1144949061983297536L, "actualByTimecard")); + summaryApprovalParams.add(new SummaryApprovalParam("实际打卡工时", "sjdkgs", 1144949061983297537L, "actualWork")); + summaryApprovalParams.add(new SummaryApprovalParam("迟到工时", "cdgs", 1144949061983297538L, "lateLength")); + summaryApprovalParams.add(new SummaryApprovalParam("迟到次数", "cdcs", 1144949061983297539L, "lateNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("严重迟到工时", "yzcdgs", 1144949061983297540L, "seriouslyLateLength")); + summaryApprovalParams.add(new SummaryApprovalParam("严重迟到次数", "yzcdcs", 1144949117608157195L, "seriousLateNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("早退工时", "ztgs", 1144949117608157196L, "earlyOutLength")); + summaryApprovalParams.add(new SummaryApprovalParam("早退次数", "ztcs", 1144949117608157197L, "leaveEarlyNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("严重早退工时", "yzztgs", 1144949117608157198L, "seriouslyEarlyLength")); + summaryApprovalParams.add(new SummaryApprovalParam("严重早退次数", "yzztcs", 1144949117608157199L, "seriousEarlyNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("未出勤工时", "wcqgs", 1144949491362586625L, "lostLength")); + summaryApprovalParams.add(new SummaryApprovalParam("旷工工时", "kggs", 1144949491362586626L, "absenteeismLength")); + summaryApprovalParams.add(new SummaryApprovalParam("旷工次数", "kgcs", 1144949491362586627L, "absentNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("签到次数", "qdcs", 1144949491362586628L, "SIGN_IN_RECORD")); + summaryApprovalParams.add(new SummaryApprovalParam("签退次数", "qtcs", 1144949491362586629L, "SIGN_OUT_RECORD")); + summaryApprovalParams.add(new SummaryApprovalParam("外勤次数", "wqcs", 1144949641652887553L, "oAttendNum")); + summaryApprovalParams.add(new SummaryApprovalParam("外勤时长", "wqsz", 1144949641652887554L, "oAttendLength")); + summaryApprovalParams.add(new SummaryApprovalParam("工作日出差", "gzrcc", 1144949641652887555L, "bTnormal")); + summaryApprovalParams.add(new SummaryApprovalParam("周末出差", "zmcc", 1144949641652887556L, "bTweekend")); + summaryApprovalParams.add(new SummaryApprovalParam("节假日出差", "jjrcc", 1144949641652887557L, "bTholiday")); + summaryApprovalParams.add(new SummaryApprovalParam("工作日公出", "gzrgc", 1144949744774045697L, "oSnormal")); + summaryApprovalParams.add(new SummaryApprovalParam("周末公出", "zmgc", 1144949744774045698L, "oSweekend")); + summaryApprovalParams.add(new SummaryApprovalParam("节假日公出", "jjrgc", 1144949744774045699L, "oSholiday")); + summaryApprovalParams.add(new SummaryApprovalParam("事假", "sj", 1144949744774045700L, "leaveHour8443762179122157788")); + summaryApprovalParams.add(new SummaryApprovalParam("丧假", "sj1", 1144949744774045701L, "leaveHour8443762179149957809")); + summaryApprovalParams.add(new SummaryApprovalParam("产假", "cj", 1144950285931536385L, "leaveHour8443762179149957807")); + summaryApprovalParams.add(new SummaryApprovalParam("婚假", "hj", 1144950285931536386L, "leaveHour8443762179149957805")); + summaryApprovalParams.add(new SummaryApprovalParam("调休", "dx", 1144950285931536387L, "leaveHour8443762179149457801")); + summaryApprovalParams.add(new SummaryApprovalParam("病假", "bj", 1144950285931536388L, "leaveHour8443762179149457799")); + summaryApprovalParams.add(new SummaryApprovalParam("年休假", "nxj", 1144950285931536389L, "leaveHour8443762179122457790")); + summaryApprovalParams.add(new SummaryApprovalParam("陪产假", "pcj", 1144950363299667978L, "leaveHour1127871967101444097")); + summaryApprovalParams.add(new SummaryApprovalParam("计生假", "jsj", 1144950363299667979L, "leaveHour1127872057295757312")); + summaryApprovalParams.add(new SummaryApprovalParam("哺乳假", "brj", 1144950363299667980L, "leaveHour1127872117173641218")); + summaryApprovalParams.add(new SummaryApprovalParam("探亲假", "tqj", 1144950363299667981L, "leaveHour1127872194575327234")); + summaryApprovalParams.add(new SummaryApprovalParam("工伤假", "gsj", 1144950363299667982L, "leaveHour1127872289131716608")); + summaryApprovalParams.add(new SummaryApprovalParam("育儿假", "yej", 1144950461924532226L, "leaveHour1127873989888434176")); + summaryApprovalParams.add(new SummaryApprovalParam("赡养费", "syj", 1144950461924532227L, "leaveHour1127874024155897865")); + summaryApprovalParams.add(new SummaryApprovalParam("工作日加班(不关联调休)", "gzrjbbgldx", 1144950461924532228L, "nlieu_normal")); + summaryApprovalParams.add(new SummaryApprovalParam("双休日加班(不关联调休)", "sxrjbbgldx", 1144950461924532229L, "nlieu_weekend")); + summaryApprovalParams.add(new SummaryApprovalParam("节假日加班(不关联调休)", "jjrjbbgldx", 1144950461924532230L, "nlieu_holiday")); + summaryApprovalParams.add(new SummaryApprovalParam("工作日加班(关联调休)", "gzrjbgldx", 1144950543713460224L, "lieu_normal")); + summaryApprovalParams.add(new SummaryApprovalParam("双休日加班(关联调休)", "sxrjbgldx", 1144950543713460225L, "lieu_weekend")); + summaryApprovalParams.add(new SummaryApprovalParam("节假日加班(关联调休)", "jjrjbgldx", 1144950543713460226L, "lieu_holiday")); + summaryApprovalParams.add(new SummaryApprovalParam("未签到次数", "wqdcs", 1144950543713460227L, "absenseNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("未签退次数", "wqtcs", 1144950543713460228L, "unSignOutNumOfMonth")); + summaryApprovalParams.add(new SummaryApprovalParam("未打卡次数", "wdkcs", 1144950818599755777L, "unSignNum")); + + + //表单字段集合 + List formDataDetailDtos = new ArrayList<>(); + + // 构建主表字段 + FormDataDetailDto monthDetailDto = new FormDataDetailDto(); + monthDetailDto.setFieldId(Long.valueOf(mainFieldsMap.get("kqyf"))); + monthDetailDto.setContent(month); + formDataDetailDtos.add(monthDetailDto); + + // 构建明细表数据 + String decode = URLDecoder.decode(detailData, "UTF-8"); + User currentUser = UserContext.getCurrentUser(); + + JSONArray detailDataArray = JSON.parseArray(decode); + for (int rorIndex = 0; rorIndex < detailDataArray.size(); rorIndex++) { + int rowNum = rorIndex + 1; + JSONObject detailRow = detailDataArray.getJSONObject(rorIndex); + + for (SummaryApprovalParam param : summaryApprovalParams) { + String content = detailRow.getString(param.getRowKey()); + if (StringUtils.isBlank(content)) { + // 如果为空,置为null + content = null; + } + FormDataDetailDto detailDto = new FormDataDetailDto(); + detailDto.setFieldId(param.getFieldId()); + detailDto.setDataIndex((long) rowNum); + detailDto.setContent(content); + formDataDetailDtos.add(detailDto); + } + + log.error("formDataDetailDtos==" + JSON.toJSONString(formDataDetailDtos)); + + } + + if (CollectionUtils.isEmpty(formDataDetailDtos)) { + return WeaResult.fail("请选择数据后进行提交"); + } + + + //表单数据 + FormDataDto formDataDto = new FormDataDto(); + formDataDto.setFormId(Long.valueOf(formId)); + formDataDto.setDataDetails(formDataDetailDtos); + + FormDataDtoParam formDataDtoParam = new FormDataDtoParam(); + formDataDtoParam.setFormDataDtos(Collections.singletonList(formDataDto)); + formDataDtoParam.setFormId(Long.valueOf(formId)); + + WeaResult flow = + wfcRequestOperateRest.createFlowV2(wfcRequestOperateParamDataEntity, UserContext.getCurrentUser(), formDataDtoParam); + + //WeaResult flow = + // wfcRequestOperateRest.createFlow(wfcRequestOperateParamDataEntity, UserContext.getCurrentUser(), formDataDto); + return flow; + + } +} diff --git a/src/main/resources/mapper/AttendanceSchedulingMapper.xml b/src/main/resources/mapper/AttendanceSchedulingMapper.xml new file mode 100644 index 0000000..72b28a5 --- /dev/null +++ b/src/main/resources/mapper/AttendanceSchedulingMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + t.id,form_data_id,ygid,ssyf + + + + + diff --git a/src/main/resources/mapper/SchedulingStatusMapper.xml b/src/main/resources/mapper/SchedulingStatusMapper.xml new file mode 100644 index 0000000..8d92ff4 --- /dev/null +++ b/src/main/resources/mapper/SchedulingStatusMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + t.id,ry,yf,zt + + + insert into uf_kqpbztb + (id,is_flow,data_status,data_index,creator,create_time,delete_type,ft_status,form_data_id,tenant_key,ry,yf,zt) + values + (#{id},0,1,0,#{creator},#{create_time},0,0,#{form_data_id},#{tenant_key},#{employeeId},#{month},#{status}) + + + update uf_kqpbztb t set zt = #{status} where id = #{id} + + + + + + +