From ff15a0759a8f78b415069cb29dbc8803d27f73bc Mon Sep 17 00:00:00 2001 From: hshansha Date: Mon, 26 May 2025 16:19:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8C=85=E6=B4=BB=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PayWorkOrderBaohuoController.java | 2 +- .../pay/domain/PayDayWorkHoursQuery.java | 169 +++++++ .../pay/domain/bo/PayWorkOrderBaohuoBo.java | 19 + .../pay/mapper/PayDayWorkHoursMapper.java | 4 + .../pay/mapper/PayWorkOrderBaohuoMapper.java | 14 + .../service/IPayWorkOrderBaohuoService.java | 3 + .../impl/PayDayWorkHoursServiceImpl.java | 5 + .../impl/PayWorkOrderBaohuoServiceImpl.java | 411 +++++++++++++++++- .../com/ruoyi/pay/util/ArchiveIdUtil.java | 28 ++ .../com/ruoyi/pay/util/DateCompareUtil.java | 88 ++++ .../mapper/pay/PayDayWorkHoursMapper.xml | 35 ++ .../mapper/pay/PayWorkOrderBaohuoMapper.xml | 26 +- 12 files changed, 789 insertions(+), 15 deletions(-) create mode 100644 ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java create mode 100644 ruoyi-pay/src/main/java/com/ruoyi/pay/util/ArchiveIdUtil.java create mode 100644 ruoyi-pay/src/main/java/com/ruoyi/pay/util/DateCompareUtil.java diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayWorkOrderBaohuoController.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayWorkOrderBaohuoController.java index 76ae938..9034394 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayWorkOrderBaohuoController.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayWorkOrderBaohuoController.java @@ -74,7 +74,7 @@ public class PayWorkOrderBaohuoController extends BaseController { @Log(title = "包活派工单", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(PayWorkOrderBaohuoBo bo, HttpServletResponse response) { - List list = iPayWorkOrderBaohuoService.queryList(bo); + List list = iPayWorkOrderBaohuoService.getWorkOrderListByDate(bo.getExportDate()); list.stream().parallel().forEach(vo -> { vo.setAvgAmount(vo.getAmount().divide(new BigDecimal(vo.getWorkerNum()), 2, RoundingMode.HALF_UP)); vo.setWorkTime(vo.getWorkTime().divide(new BigDecimal(vo.getWorkerNum()), 2,RoundingMode.HALF_UP)); diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java new file mode 100644 index 0000000..b5ffb30 --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java @@ -0,0 +1,169 @@ +package com.ruoyi.pay.domain; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; +import java.util.List; + +public class PayDayWorkHoursQuery extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 员工部门id + */ + @ExcelProperty(value = "员工部门id") + private Long deptId; + + /** + * 员工部门名称 + */ + @ExcelProperty(value = "员工部门名称") + private String deptName; + + /** + * 员工id + */ + @ExcelProperty(value = "员工id") + private Long employeeId; + + /** + * 员工姓名 + */ + @ExcelProperty(value = "员工姓名") + private String empName; + + /** + * 日工日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @ExcelProperty(value = "日工日期") + private Date date; + + /** + * 日工年月 + */ + @ExcelProperty(value = "日工年月") + private String dwYearMonth; + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String note; + /** + * 为前端传值方便添加,查询时候专用字段 + */ + private String salesman; + + + /** + * 日工工时时间段 + */ + private List dwHoursContrasts; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getEmpName() { + return empName; + } + + public void setEmpName(String empName) { + this.empName = empName; + } + + public Long getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(Long employeeId) { + this.employeeId = employeeId; + } + + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getDwYearMonth() { + return dwYearMonth; + } + + public void setDwYearMonth(String dwYearMonth) { + this.dwYearMonth = dwYearMonth; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getSalesman() { + return salesman; + } + + public void setSalesman(String salesman) { + this.salesman = salesman; + } + + public List getDwHoursContrasts() { + return dwHoursContrasts; + } + + public void setDwHoursContrasts(List dwHoursContrasts) { + this.dwHoursContrasts = dwHoursContrasts; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("deptId", getDeptId()) + .append("deptName", getDeptName()) + .append("employeeId", getEmployeeId()) + .append("empName", getEmpName()) + .append("date", getDate()) + .append("dwYearMonth", getDwYearMonth()) + .append("note", getNote()) + .append("dwHoursContrasts", getDwHoursContrasts()) + .toString(); + } +} diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayWorkOrderBaohuoBo.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayWorkOrderBaohuoBo.java index 4d07b05..6141bdc 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayWorkOrderBaohuoBo.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayWorkOrderBaohuoBo.java @@ -2,6 +2,9 @@ package com.ruoyi.pay.domain.bo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.pay.domain.PayBaohuoEmployee; +import com.ruoyi.pay.domain.PayBaohuoProduct; +import com.ruoyi.pay.domain.PayBaohuoWorktime; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.*; @@ -10,6 +13,8 @@ import java.util.Date; import java.math.BigDecimal; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseEntity; @@ -156,5 +161,19 @@ public class PayWorkOrderBaohuoBo extends BaseEntity { @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; + // 产品列表 + private List prodList; + + + // 员工列表 + private List empList; + + + // 工时列表 + private List worktimeList; + + // 导出日期 + private Date exportDate; + } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java index 48a899d..be7a03c 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java @@ -1,9 +1,12 @@ package com.ruoyi.pay.mapper; import com.ruoyi.pay.domain.PayDayWorkHours; +import com.ruoyi.pay.domain.PayDayWorkHoursQuery; import com.ruoyi.pay.domain.vo.PayDayWorkHoursVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 日工工时Mapper接口 * @@ -12,4 +15,5 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus; */ public interface PayDayWorkHoursMapper extends BaseMapperPlus { + List selectSgrDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderBaohuoMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderBaohuoMapper.java index c9c5c27..f18f77a 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderBaohuoMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayWorkOrderBaohuoMapper.java @@ -3,6 +3,11 @@ package com.ruoyi.pay.mapper; import com.ruoyi.pay.domain.PayWorkOrderBaohuo; import com.ruoyi.pay.domain.vo.PayWorkOrderBaohuoVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Select; + +import java.util.Date; +import java.util.List; /** * 包活派工单Mapper接口 @@ -11,5 +16,14 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus; * @date 2025-05-12 */ public interface PayWorkOrderBaohuoMapper extends BaseMapperPlus { + @Select("SELECT IFNULL(dept_name, '') as deptName FROM sys_dept WHERE dept_id = #{deptId}") + String getDeptNameById(Long deptId); + @Delete("delete from pay_baohuo_product where wo_id = #{woid}") + void deleteAllProdByWoId(Long id); + @Delete("delete from pay_baohuo_employee where wo_id = #{woid}") + void deleteAllEmpByWoId(Long id); + @Delete("delete from pay_baohuo_worktime where wo_id = #{woid}") + void deleteAllWorkTimeByWoId(Long id); + List getWorkOrderListByDate(Date exportDate); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayWorkOrderBaohuoService.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayWorkOrderBaohuoService.java index 13c7ba3..fd0272b 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayWorkOrderBaohuoService.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/IPayWorkOrderBaohuoService.java @@ -9,6 +9,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import java.util.Collection; +import java.util.Date; import java.util.List; /** @@ -50,4 +51,6 @@ public interface IPayWorkOrderBaohuoService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); R> baohuoSum(String date, Long deptId,Long tenantId); + + List getWorkOrderListByDate(Date exportDate); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java index 78307de..e2e685f 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.pay.domain.PayDayWorkHoursQuery; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.pay.domain.bo.PayDayWorkHoursBo; @@ -113,4 +114,8 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { } return baseMapper.deleteBatchIds(ids) > 0; } + + public List selectSgrDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery) { + return baseMapper.selectSgrDayWorkHoursList2(sgrDayWorkHoursQuery); + } } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java index abedd0f..122f949 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java @@ -1,27 +1,34 @@ package com.ruoyi.pay.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.pay.domain.PayBaohuoWorktime; -import com.ruoyi.pay.domain.PaySalaryReport; -import com.ruoyi.pay.domain.bo.PayEmployeeInfoBo; -import com.ruoyi.pay.domain.vo.PayEmployeeInfoVo; +import com.ruoyi.pay.domain.*; +import com.ruoyi.pay.domain.bo.*; +import com.ruoyi.pay.domain.vo.*; import com.ruoyi.pay.mapper.PayBaohuoWorktimeMapper; +import com.ruoyi.pay.service.IPayBaohuoEmployeeService; +import com.ruoyi.pay.service.IPayBaohuoProductService; +import com.ruoyi.pay.util.ArchiveIdUtil; +import com.ruoyi.pay.util.DateCompareUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import com.ruoyi.pay.domain.bo.PayWorkOrderBaohuoBo; -import com.ruoyi.pay.domain.vo.PayWorkOrderBaohuoVo; -import com.ruoyi.pay.domain.PayWorkOrderBaohuo; import com.ruoyi.pay.mapper.PayWorkOrderBaohuoMapper; import com.ruoyi.pay.service.IPayWorkOrderBaohuoService; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -39,6 +46,14 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService private final PayWorkOrderBaohuoMapper baseMapper; private final PayEmployeeInfoServiceImpl payEmployeeInfoService; private final PayBaohuoWorktimeMapper worktimeMapper; + private final PayWorkTimeServiceImpl workTimeService; + private final PayBaohuoWorktimeServiceImpl bhworktimeService; + private final PayAttendanceServiceImpl attendanceService; + private final PayWorkOrderBaohuoMapper sgrWorkOrderBaohuoMapper; + private final PayDayWorkHoursServiceImpl dayWorkHoursService; + private final IPayBaohuoProductService bhproductService; + private final IPayBaohuoEmployeeService bhemployeeService; + /** * 查询包活派工单 */ @@ -96,14 +111,206 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService * 新增包活派工单 */ @Override + @Transactional public Boolean insertByBo(PayWorkOrderBaohuoBo bo) { + List worktimeList = bo.getWorktimeList(); + + List prodList = bo.getProdList(); + + List empList = bo.getEmpList(); + + if (ObjectUtil.isNull(empList)|| ObjectUtil.isNull(prodList)|| ObjectUtil.isNull(worktimeList)) { + throw new ServiceException("请求参数异常"); + } + + // 产品单价检测 + for (PayBaohuoProduct product : prodList) { + this.checkPrice(product); + } + + // 增加对应的工时列表并进行判断 + for (PayBaohuoWorktime sgrWorkTime : worktimeList) { + // 判断两个时间是否正确 + if (!sgrWorkTime.getStime().before(sgrWorkTime.getEtime())) {// 开始时间在结束时间之前 + throw new ServiceException(DateUtil.format(sgrWorkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(sgrWorkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 开始结束时间颠倒"); + } + // 生成工时对应的工作日期 + sgrWorkTime.setDate(DateUtil.parse(DateUtil.format(sgrWorkTime.getStime(), "yyyy-MM-dd"))); + } + // 判断有效时长是否正确 + //for (SgrBaohuoWorktime sgrWorkTime : worktimeList) { + // long between = DateUtil.between(sgrWorkTime.getStime(), sgrWorkTime.getEtime(), DateUnit.MINUTE); + // BigDecimal valHours = new BigDecimal(between).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP); + // if (sgrWorkTime.getValidHours().compareTo(valHours) > 0) { + // throw new ServiceException(DateUtil.format(sgrWorkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(sgrWorkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " " + sgrWorkTime.getValidHours() + "小时有效时长错误"); + // } + //} + + // TODO 特殊部门单独判断 + + // 判断每个员工对应的包活工单工时以及流程卡工时 + for (PayBaohuoEmployee emp : empList) { + for (PayBaohuoWorktime bhworktime : worktimeList) { + // 流程卡工单时间比对 + PayWorkTimeBo searchWorkTime = new PayWorkTimeBo(); + searchWorkTime.setDate(DateUtil.parse(DateUtil.format(bhworktime.getDate(), "yyyy-MM-dd"))); + searchWorkTime.setEmpId(emp.getEmpId()); + List workTimes = workTimeService.queryList(searchWorkTime); + for (PayWorkTimeVo workTime : workTimes) { + if (DateCompareUtil.isContainOrOverlap(workTime.getStime(), workTime.getEtime(), bhworktime.getStime(), bhworktime.getEtime())) { + throw new ServiceException("员工:"+ emp.getEmpName()+ "已经存在 " +DateUtil.format(bhworktime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworktime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 该时间段流程卡工单工时"); + } + } + // 包活工单工时比对 + PayBaohuoWorktimeBo searchBaohuoWorktime = new PayBaohuoWorktimeBo(); + searchBaohuoWorktime.setDate(DateUtil.parse(DateUtil.format(bhworktime.getDate(), "yyyy-MM-dd"))); + searchBaohuoWorktime.setEmpId(emp.getEmpId()); + List baohuoWorktimes = bhworktimeService.queryList(searchBaohuoWorktime); + for (PayBaohuoWorktimeVo baohuoWorktime : baohuoWorktimes) { + if (DateCompareUtil.isContainOrOverlap(baohuoWorktime.getStime(), baohuoWorktime.getEtime(), bhworktime.getStime(), bhworktime.getEtime())) { + throw new ServiceException("员工:"+ emp.getEmpName()+ "已经存在 " +DateUtil.format(bhworktime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworktime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 该时间段包活工单工时"); + } + } + } + } + + // 判断是否包含在考勤的时间段内 + for (PayBaohuoEmployee employee : empList) { + for (PayBaohuoWorktime bhworkTime : worktimeList) { + PayAttendanceBo sgrAttendance = new PayAttendanceBo(); + sgrAttendance.setEmpName(employee.getEmpName()); + sgrAttendance.setKaoqinDate(bhworkTime.getDate()); + List ats = attendanceService.queryList(sgrAttendance); + // 判断考勤是否存在-务必存在考勤,没有需要补考勤 + if (ObjectUtil.isNull(ats) || ats.size() == 0) { + throw new ServiceException("员工:"+ employee.getEmpName() + "在 " + DateUtil.format(bhworkTime.getDate(), "yyyy-MM-dd") + " 考勤不存在,请完善考勤"); + } + + // 获取员工所在部门 + String deptName = sgrWorkOrderBaohuoMapper.getDeptNameById(employee.getDeptId()); + + // 判断考勤是否完整-喷塑生产不校验 + if (!"喷塑生产".equals(deptName)) { + //修改喷塑生产不校验考勤 + /*if(ObjectUtil.isNull(at.getAmStartTime())|| ObjectUtil.isNull(at.getPmEndTime())){ + throw new ServiceException("员工:"+ employee.getEmpName() + "在 " + DateUtil.format(bhworkTime.getDate(), "yyyy-MM-dd") + " 喷塑生产部门考勤不完整"); + } + + if (!DateCompareUtil.isContain(at.getAmStartTime(), at.getPmEndTime(), bhworkTime.getStime(), bhworkTime.getEtime())) { // 当天考勤不包含工时 + throw new ServiceException("员工:"+ employee.getEmpName() + "在" + DateUtil.format(bhworkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 时间段内不存在当日喷塑生产部门考勤"); + }*/ + PayAttendanceVo at = ats.get(0); + if ((ObjectUtil.isNull(at.getAmStartTime()) || ObjectUtil.isNull(at.getAmEndTime())) && (ObjectUtil.isNull(at.getPmStartTime()) || ObjectUtil.isNull(at.getPmEndTime()))) { + // 上午或者下午考勤都不完整 + throw new ServiceException("员工:"+ employee.getEmpName() + "在 " + DateUtil.format(bhworkTime.getDate(), "yyyy-MM-dd") + " 考勤不完整"); + } + // 上、下午考勤都存在或存在一个 + boolean kaoqin = false; + if (ObjectUtil.isNotNull(at.getAmStartTime()) && ObjectUtil.isNotNull(at.getAmEndTime())) { // 上午考勤完整 + if (DateCompareUtil.isContain(at.getAmStartTime(), at.getAmEndTime(), bhworkTime.getStime(), bhworkTime.getEtime())) { // 上午考勤包含工时 + kaoqin = true; + } + } + if (!kaoqin) { // 上午考勤不包含工时 + if (ObjectUtil.isNotNull(at.getPmStartTime()) && ObjectUtil.isNotNull(at.getPmEndTime())) { + if (DateCompareUtil.isContain(at.getPmStartTime(), at.getPmEndTime(), bhworkTime.getStime(), bhworkTime.getEtime())) { // 下午考勤包含工时 + kaoqin = true; + } + } + } + if (!kaoqin) { // 上下午考勤都不包含工时 + throw new ServiceException("员工:"+ employee.getEmpName() + "在" + DateUtil.format(bhworkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 时间段内不存在当日考勤"); + } + } + } + } + + // 判断该时间段内是否有重叠的日工工时 + for (PayBaohuoEmployee employee : empList) { + for (PayBaohuoWorktime sgrWorkTime : worktimeList) { + PayDayWorkHoursQuery sgrDayWorkHoursQuery = new PayDayWorkHoursQuery(); + sgrDayWorkHoursQuery.setDate(sgrWorkTime.getDate()); + sgrDayWorkHoursQuery.setEmployeeId(employee.getEmpId()); + List queryList = dayWorkHoursService.selectSgrDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时 + for (PayDayWorkHoursQuery query : queryList) { + List dwHoursContrasts = query.getDwHoursContrasts(); + for (PayDwHoursContrast dwHoursContrast : dwHoursContrasts) { + if (DateCompareUtil.isContainOrOverlap(dwHoursContrast.getStartTime(), dwHoursContrast.getEndTime(), sgrWorkTime.getStime(), sgrWorkTime.getEtime())) { + throw new ServiceException("员工:"+ employee.getEmpName() + " 存在时间重叠的日工工时"); + } + } + } + } + } + //if (empList.size() == 0 || prodList.size() == 0 || worktimeList.size() == 0) { + // throw new ServiceException("员工数或产品数或工时数不能为0"); + //} + + // 获取总金额 + BigDecimal total = BigDecimal.ZERO; + for (PayBaohuoProduct product : prodList) { + total = total.add(product.getAmount()); + } + + // 获取平均工资 + BigDecimal average = BigDecimal.ZERO; + if (ObjectUtil.isNotNull(empList) && empList.size() > 0) { + average = total.divide(new BigDecimal(empList.size()), 3, RoundingMode.HALF_UP); + } + + // 新增包活派工单 + bo.setCreateTime(DateUtils.getNowDate()); // 创建时间 + bo.setCreateBy(LoginHelper.getUsername()); // 创建者 + bo.setArchiveId(ArchiveIdUtil.getBHArchiveId()); // 归档ID PayWorkOrderBaohuo add = BeanUtil.toBean(bo, PayWorkOrderBaohuo.class); validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); + int i = baseMapper.insert(add); + if (i<0) { + throw new ServiceException("包活工单新增失败"); + } + + + // 增加对应的产品列表 + for (PayBaohuoProduct product : prodList) { + product.setWoId(bo.getId()); + PayBaohuoProductBo productBo= BeanUtil.toBean(product,PayBaohuoProductBo.class); + bhproductService.insertByBo(productBo); + } + // 增加对应的员工列表 + for (PayBaohuoEmployee employee : empList) { + employee.setWoId(bo.getId()); + employee.setEmpId(employee.getEmpId()); + employee.setMonth(DateUtil.format(bo.getInstorageTime(), "yyyy-MM")); + employee.setIntime(bo.getInstorageTime()); + employee.setHelper(employee.getHelper()); + employee.setAmount(average); + PayBaohuoEmployeeBo payBaohuoEmployeeBo = BeanUtil.toBean(employee, PayBaohuoEmployeeBo.class); + boolean a = bhemployeeService.insertByBo(payBaohuoEmployeeBo); + + // 为每个工单的员工都增加对应的工时 + for (PayBaohuoWorktime sgrWorkTime : worktimeList) { + sgrWorkTime.setId(null); + sgrWorkTime.setWoId(bo.getId()); + sgrWorkTime.setEmpId(employee.getEmpId()); + sgrWorkTime.setBheId(employee.getId()); + //sgrWorkTime.setIntime(sgrWorkOrderBaohuo.getInstorageTime()); + PayBaohuoWorktimeBo payBaohuoWorktimeBo = BeanUtil.toBean(sgrWorkTime, PayBaohuoWorktimeBo.class); + bhworktimeService.insertByBo(payBaohuoWorktimeBo); + } + } + return true; + } + + private void checkPrice(PayBaohuoProduct product) { + if (product.getPrice().compareTo(product.getMinPrice()) < 0 || product.getPrice().compareTo(product.getMaxPrice()) > 0) { + throw new ServiceException("产品:" + product.getProductName() + "单价不在范围内"); + } + //if (product.getPrice().compareTo(product.getAmount()) > 0) { + // throw new ServiceException("产品:" + product.getProductName() + "单价低于总金额"); + //} + if (product.getAmount().compareTo(product.getPrice().multiply(new BigDecimal(String.valueOf(product.getProductNum())))) != 0) { + throw new ServiceException("产品:" + product.getProductName() + "总金额数值异常"); } - return flag; } /** @@ -111,9 +318,176 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService */ @Override public Boolean updateByBo(PayWorkOrderBaohuoBo bo) { + List worktimeList = bo.getWorktimeList(); + + List prodList = bo.getProdList(); + + List empList = bo.getEmpList(); + + // 产品单价检测 + for (PayBaohuoProduct product : prodList) { + this.checkPrice(product); + } + + // 增加对应的工时列表并进行判断 + for (PayBaohuoWorktime sgrWorkTime : worktimeList) { + // 判断两个时间是否正确 + if (!sgrWorkTime.getStime().before(sgrWorkTime.getEtime())) {// 开始时间在结束时间之前 + throw new ServiceException(DateUtil.format(sgrWorkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(sgrWorkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 开始结束时间颠倒"); + } + // 生成工时对应的工作日期 + sgrWorkTime.setDate(DateUtil.parse(DateUtil.format(sgrWorkTime.getStime(), "yyyy-MM-dd"))); + sgrWorkTime.setId(null); + } + // 判断有效时长是否正确 + //for (SgrBaohuoWorktime sgrWorkTime : worktimeList) { + // long between = DateUtil.between(sgrWorkTime.getStime(), sgrWorkTime.getEtime(), DateUnit.MINUTE); + // BigDecimal valHours = new BigDecimal(between).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP); + // if (sgrWorkTime.getValidHours().compareTo(valHours) > 0) { + // throw new ServiceException(DateUtil.format(sgrWorkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(sgrWorkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " " + sgrWorkTime.getValidHours() + "小时有效时长错误"); + // } + //} + + // TODO 特殊部门单独判断 + + // 判断每个员工对应的包活工单工时以及流程卡工时 + for (PayBaohuoEmployee emp : empList) { + for (PayBaohuoWorktime bhworktime : worktimeList) { + // 流程卡工单时间比对 + PayWorkTimeBo searchWorkTime = new PayWorkTimeBo(); + searchWorkTime.setDate(DateUtil.parse(DateUtil.format(bhworktime.getDate(), "yyyy-MM-dd"))); + searchWorkTime.setEmpId(emp.getEmpId()); + List workTimes = workTimeService.queryList(searchWorkTime); + for (PayWorkTimeVo workTime : workTimes) { + if (DateCompareUtil.isContainOrOverlap(workTime.getStime(), workTime.getEtime(), bhworktime.getStime(), bhworktime.getEtime())) { + throw new ServiceException("员工:"+ emp.getEmpName()+ "已经存在 " +DateUtil.format(bhworktime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworktime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 该时间段流程卡工单工时"); + } + } + // 包活工单工时比对 + PayBaohuoWorktimeBo searchBaohuoWorktime = new PayBaohuoWorktimeBo(); + searchBaohuoWorktime.setDate(DateUtil.parse(DateUtil.format(bhworktime.getDate(), "yyyy-MM-dd"))); + searchBaohuoWorktime.setEmpId(emp.getEmpId()); + List baohuoWorktimes = bhworktimeService.queryList(searchBaohuoWorktime); + for (PayBaohuoWorktimeVo baohuoWorktime : baohuoWorktimes) { + if (DateCompareUtil.isContainOrOverlap(baohuoWorktime.getStime(), baohuoWorktime.getEtime(), bhworktime.getStime(), bhworktime.getEtime())) { + throw new ServiceException("员工:"+ emp.getEmpName()+ "已经存在 " +DateUtil.format(bhworktime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworktime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 该时间段包活工单工时"); + } + } + } + } + + // 判断是否包含在考勤的时间段内 + for (PayBaohuoEmployee employee : empList) { + for (PayBaohuoWorktime bhworkTime : worktimeList) { + PayAttendanceBo sgrAttendance = new PayAttendanceBo(); + sgrAttendance.setEmpName(employee.getEmpName()); + sgrAttendance.setKaoqinDate(bhworkTime.getDate()); + List ats = attendanceService.queryList(sgrAttendance); + // 判断考勤是否存在-务必存在考勤,没有需要补考勤 + if (ObjectUtil.isNull(ats) || ats.size() == 0) { + throw new ServiceException("员工:" + employee.getEmpName() + "在 " + DateUtil.format(bhworkTime.getDate(), "yyyy-MM-dd") + " 考勤不存在,请完善考勤"); + } + + PayAttendanceVo at = ats.get(0); + // 判断考勤是否完整-喷塑生产不校验 + if (!"喷塑生产".equals(at.getDeptName())) { + } else { + if ((ObjectUtil.isNull(at.getAmStartTime()) || ObjectUtil.isNull(at.getAmEndTime())) && (ObjectUtil.isNull(at.getPmStartTime()) || ObjectUtil.isNull(at.getPmEndTime()))) { + // 上午或者下午考勤都不完整 + throw new ServiceException("员工:" + employee.getEmpName() + "在 " + DateUtil.format(bhworkTime.getDate(), "yyyy-MM-dd") + " 考勤不完整"); + } + // 上、下午考勤都存在或存在一个 + boolean kaoqin = false; + if (ObjectUtil.isNotNull(at.getAmStartTime()) && ObjectUtil.isNotNull(at.getAmEndTime())) { // 上午考勤完整 + if (DateCompareUtil.isContain(at.getAmStartTime(), at.getAmEndTime(), bhworkTime.getStime(), bhworkTime.getEtime())) { // 上午考勤包含工时 + kaoqin = true; + } + } + if (!kaoqin) { // 上午考勤不包含工时 + if (ObjectUtil.isNotNull(at.getPmStartTime()) && ObjectUtil.isNotNull(at.getPmEndTime())) { + if (DateCompareUtil.isContain(at.getPmStartTime(), at.getPmEndTime(), bhworkTime.getStime(), bhworkTime.getEtime())) { // 下午考勤包含工时 + kaoqin = true; + } + } + } + if (!kaoqin) { // 上下午考勤都不包含工时 + throw new ServiceException("员工:" + employee.getEmpName() + "在" + DateUtil.format(bhworkTime.getStime(), "yyyy-MM-dd HH:mm:ss") + " 到 " + DateUtil.format(bhworkTime.getEtime(), "yyyy-MM-dd HH:mm:ss") + " 时间段内不存在当日考勤"); + } + } + } + } + + // 判断该时间段内是否有重叠的日工工时 + for (PayBaohuoEmployee employee : empList) { + for (PayBaohuoWorktime sgrWorkTime : worktimeList) { + PayDayWorkHoursQuery sgrDayWorkHoursQuery = new PayDayWorkHoursQuery(); + sgrDayWorkHoursQuery.setDate(sgrWorkTime.getDate()); + sgrDayWorkHoursQuery.setEmployeeId(employee.getEmpId()); + List queryList = dayWorkHoursService.selectSgrDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时 + for (PayDayWorkHoursQuery query : queryList) { + List dwHoursContrasts = query.getDwHoursContrasts(); + for (PayDwHoursContrast dwHoursContrast : dwHoursContrasts) { + if (DateCompareUtil.isContainOrOverlap(dwHoursContrast.getStartTime(), dwHoursContrast.getEndTime(), sgrWorkTime.getStime(), sgrWorkTime.getEtime())) { + throw new ServiceException("员工:"+ employee.getEmpName() + " 存在时间重叠的日工工时"); + } + } + } + } + } + //if (empList.size() == 0 || prodList.size() == 0 || worktimeList.size() == 0) { + // throw new ServiceException("员工数或产品数或工时数不能为0"); + //} + + // 删除包活工单下对应的员工表数据、产品数据、工时数据 + baseMapper.deleteAllProdByWoId(bo.getId()); + baseMapper.deleteAllEmpByWoId(bo.getId()); + baseMapper.deleteAllWorkTimeByWoId(bo.getId()); + + // 获取总金额 + BigDecimal total = BigDecimal.ZERO; + for (PayBaohuoProduct product : prodList) { + total = total.add(product.getAmount()); + } + + // 获取平均工资 + BigDecimal average = BigDecimal.ZERO; + if (ObjectUtil.isNotNull(empList) && empList.size() > 0) { + average = total.divide(new BigDecimal(empList.size()), 3, RoundingMode.HALF_UP); + } + + // 增加对应的产品列表 + for (PayBaohuoProduct product : prodList) { + product.setWoId(bo.getId()); + PayBaohuoProductBo productBo= BeanUtil.toBean(product,PayBaohuoProductBo.class); + bhproductService.insertByBo(productBo); + } + // 增加对应的员工列表 + for (PayBaohuoEmployee employee : empList) { + employee.setWoId(bo.getId()); + employee.setEmpId(employee.getEmpId()); + employee.setMonth(DateUtil.format(bo.getInstorageTime(), "yyyy-MM")); + employee.setIntime(bo.getInstorageTime()); + employee.setHelper(employee.getHelper()); + employee.setAmount(average); + PayBaohuoEmployeeBo payBaohuoEmployeeBo = BeanUtil.toBean(employee, PayBaohuoEmployeeBo.class); + boolean a = bhemployeeService.insertByBo(payBaohuoEmployeeBo); + + // 为每个工单的员工都增加对应的工时 + for (PayBaohuoWorktime sgrWorkTime : worktimeList) { + sgrWorkTime.setId(null); + sgrWorkTime.setWoId(bo.getId()); + sgrWorkTime.setEmpId(employee.getEmpId()); + sgrWorkTime.setBheId(employee.getId()); + //sgrWorkTime.setIntime(sgrWorkOrderBaohuo.getInstorageTime()); + PayBaohuoWorktimeBo payBaohuoWorktimeBo = BeanUtil.toBean(sgrWorkTime, PayBaohuoWorktimeBo.class); + bhworktimeService.insertByBo(payBaohuoWorktimeBo); + } + } + bo.setUpdateBy(LoginHelper.getUsername()); + bo.setUpdateTime(DateUtils.getNowDate()); PayWorkOrderBaohuo update = BeanUtil.toBean(bo, PayWorkOrderBaohuo.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.update(update,lqw)>0; } /** @@ -131,6 +505,12 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } + for (Long id : ids) { + // 删除包活工单下对应的员工表数据、产品数据、工时数据 + baseMapper.deleteAllProdByWoId(id); + baseMapper.deleteAllEmpByWoId(id); + baseMapper.deleteAllWorkTimeByWoId(id); + } return baseMapper.deleteBatchIds(ids) > 0; } @@ -184,4 +564,9 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService return R.ok(result); } + + @Override + public List getWorkOrderListByDate(Date exportDate) { + return sgrWorkOrderBaohuoMapper.getWorkOrderListByDate(exportDate); + } } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/util/ArchiveIdUtil.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/util/ArchiveIdUtil.java new file mode 100644 index 0000000..5977b1e --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/util/ArchiveIdUtil.java @@ -0,0 +1,28 @@ +package com.ruoyi.pay.util; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; + +import java.util.Date; + +public class ArchiveIdUtil { + /** + * 说明:生成图纸流程卡归档ID字符串 + * + * @return 返回字符串 + */ + public static String getLCKArchiveId() { + // 返回图纸流程卡归档ID + return "LCK" + DateUtil.format(new Date(), "yyMMdd") + RandomUtil.randomNumbers(4); + } + + /** + * 说明:生成包活派工单归档ID字符串 + * + * @return 返回字符串 + */ + public static String getBHArchiveId() { + // 返回图纸流程卡归档ID + return "BH" + DateUtil.format(new Date(), "yyMMdd") + RandomUtil.randomNumbers(4); + } +} diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/util/DateCompareUtil.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/util/DateCompareUtil.java new file mode 100644 index 0000000..419550e --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/util/DateCompareUtil.java @@ -0,0 +1,88 @@ +package com.ruoyi.pay.util; + +import java.math.BigDecimal; +import java.util.Date; + +public class DateCompareUtil { + /** + * 比较2个时间短是否重叠 + * @param start1 + * @param end1 + * @param start2 + * @param end2 + * @return 重叠返回true + */ + public static boolean isOverlapping(Date start1, Date end1, Date start2, Date end2) { + boolean a = start1.before(end2) && start2.before(end1); + boolean b = start2.before(end1) && start1.before(end2); + return a || b; + } + /** + * 判断时间段1是否包含时间段2 + * @param start1 + * @param end1 + * @param start2 + * @param end2 + * @return 包含返回true + */ + public static boolean isContain(Date start1, Date end1, Date start2, Date end2) { + return (start1.before(start2)||start1.equals(start2) )&& (end1.after(end2)||end1.equals(end2)); + } + + /** + * 得到2个日期之间的的时间差 + * @param startDate + * @param endDate + * @return 小时数 + */ + public static BigDecimal getDatePoor(Date startDate, Date endDate) { + + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - startDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + Long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + Long mymint = diff/1000/60; + int intValue = mymint.intValue(); + + return new BigDecimal((double)intValue/60); + } + + /** + * 说明:两个时间段任意的包含关系 + * + * @param start1 开始时间1 + * @param end1 结束时间1 + * @param start2 开始时间2 + * @param end2 结束时间2 + * @return 是否存在包含关系 true or false + */ + public static boolean eachContain(Date start1, Date end1, Date start2, Date end2) { + boolean a = (start1.before(start2) || start1.equals(start2)) && (end1.after(end2) || end1.equals(end2)); + boolean b = (start2.before(start1) || start2.equals(start1)) && (end2.after(end1) || end2.equals(end1)); + return a || b; + } + + /** + * 说明:两个时间段是否存在包含或重叠的关系 + * + * @param start1 开始时间1 + * @param end1 结束时间1 + * @param start2 开始时间2 + * @param end2 结束时间2 + * @return 是否存在包含或重叠关系 true or false + */ + public static boolean isContainOrOverlap(Date start1, Date end1, Date start2, Date end2) { + return DateCompareUtil.isOverlapping(start1, end1, start2, end2) || DateCompareUtil.eachContain(start1, end1, start2, end2); + } +} + diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml index ca47df3..e4f3315 100644 --- a/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml @@ -16,5 +16,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderBaohuoMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderBaohuoMapper.xml index e3f8137..eb4cfa2 100644 --- a/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderBaohuoMapper.xml +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayWorkOrderBaohuoMapper.xml @@ -33,5 +33,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + + + + + + + + + + + + + + + From 3b6003746188070e094c1d04d7709afa7d72eb42 Mon Sep 17 00:00:00 2001 From: hshansha Date: Tue, 27 May 2025 11:42:57 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=A1=A5=E8=B4=B4=E3=80=81=E5=BA=94?= =?UTF-8?q?=E5=87=BA=E5=8B=A4=E5=BF=85=E5=A1=AB=E9=A1=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/pay/domain/bo/PayButieBo.java | 6 +++--- .../bo/PayRequireAttendanceReportBo.java | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayButieBo.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayButieBo.java index 1f6c7f3..7ca8cf1 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayButieBo.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayButieBo.java @@ -24,7 +24,7 @@ public class PayButieBo extends BaseEntity { /** * 主键 */ - @NotNull(message = "主键不能为空", groups = { EditGroup.class }) + // @NotNull(message = "主键不能为空", groups = { EditGroup.class }) private Long id; /** @@ -54,13 +54,13 @@ public class PayButieBo extends BaseEntity { /** * 删除标志(0-可用 1-删除) */ - @NotNull(message = "删除标志(0-可用 1-删除)不能为空", groups = { AddGroup.class, EditGroup.class }) + //@NotNull(message = "删除标志(0-可用 1-删除)不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer deleted; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayRequireAttendanceReportBo.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayRequireAttendanceReportBo.java index a0d0734..ca0a8b9 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayRequireAttendanceReportBo.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/bo/PayRequireAttendanceReportBo.java @@ -25,7 +25,7 @@ public class PayRequireAttendanceReportBo extends BaseEntity { /** * 主键 */ - @NotNull(message = "主键不能为空", groups = { EditGroup.class }) + // @NotNull(message = "主键不能为空", groups = { EditGroup.class }) private Long id; /** @@ -67,7 +67,7 @@ public class PayRequireAttendanceReportBo extends BaseEntity { /** * 休息类别 */ - @NotBlank(message = "休息类别不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "休息类别不能为空", groups = { AddGroup.class, EditGroup.class }) private String restType; /** @@ -85,37 +85,37 @@ public class PayRequireAttendanceReportBo extends BaseEntity { /** * 出勤小时数 */ - @NotNull(message = "出勤小时数不能为空", groups = { AddGroup.class, EditGroup.class }) + //@NotNull(message = "出勤小时数不能为空", groups = { AddGroup.class, EditGroup.class }) private BigDecimal attendanceHours; /** * 加班小时数 */ - @NotNull(message = "加班小时数不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "加班小时数不能为空", groups = { AddGroup.class, EditGroup.class }) private BigDecimal overtimeHours; /** * 放假天数 */ - @NotNull(message = "放假天数不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "放假天数不能为空", groups = { AddGroup.class, EditGroup.class }) private Long holidays; /** * 放假小时数 */ - @NotNull(message = "放假小时数不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "放假小时数不能为空", groups = { AddGroup.class, EditGroup.class }) private BigDecimal holidayHours; /** - * + * */ - @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) private BigDecimal leaveDays; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; From a46aaac2b9800c13ad7021162d8eb5a9b90f10af Mon Sep 17 00:00:00 2001 From: hshansha Date: Tue, 27 May 2025 13:37:49 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=8C=85=E6=B4=BB=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PayDayWorkHoursController.java | 1 + .../pay/domain/PayDayWorkHoursQuery.java | 12 ++ .../ruoyi/pay/domain/vo/ExportBaohuoVo.java | 179 ++++++++++++++++++ .../pay/mapper/PayDayWorkHoursMapper.java | 2 +- .../impl/PayDayWorkHoursServiceImpl.java | 4 +- .../impl/PayWorkOrderBaohuoServiceImpl.java | 4 +- .../mapper/pay/PayDayWorkHoursMapper.xml | 13 +- 7 files changed, 208 insertions(+), 7 deletions(-) create mode 100644 ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java index 493de65..2f8d77a 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/controller/PayDayWorkHoursController.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.pay.domain.vo.ExportBaohuoVo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java index b5ffb30..139253f 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/PayDayWorkHoursQuery.java @@ -19,6 +19,10 @@ public class PayDayWorkHoursQuery extends BaseEntity { */ private Long id; + /** + * 租户id + */ + private Long tenantId; /** * 员工部门id */ @@ -152,6 +156,14 @@ public class PayDayWorkHoursQuery extends BaseEntity { this.dwHoursContrasts = dwHoursContrasts; } + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java new file mode 100644 index 0000000..4cd6ad8 --- /dev/null +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/domain/vo/ExportBaohuoVo.java @@ -0,0 +1,179 @@ +package com.ruoyi.pay.domain.vo; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.math.BigDecimal; +import java.util.Date; + +public class ExportBaohuoVo { + /** 入库时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @ExcelProperty(value = "日期") + private Date instorageTime; + + /** 包活工单名称 */ + @ExcelProperty(value = "工单名称") + private String name; + + /** 包活工单ID */ + @ExcelProperty(value = "工单ID") + private Long woId; + + /** 产品名称 */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** 工作内容 */ + @ExcelProperty(value = "工作内容") + private String content; + + /** 单位 */ + @ExcelProperty(value = "单位") + private String unit; + + /** 加工数量 */ + @ExcelProperty(value = "数量") + private BigDecimal productNum; + + /** 产品单价 */ + @ExcelProperty(value = "产品单价") + private BigDecimal price; + + /** 加工总金额 */ + @ExcelProperty(value = "金额") + private BigDecimal amount; + + /** 平均工资 */ + @ExcelProperty(value = "每人包活工资") + private BigDecimal avgAmount; + + @ExcelProperty(value = "工作人数") + private Integer workerNum; + + @ExcelProperty(value = "包活工时") + private BigDecimal workTime; + + @ExcelProperty(value = "员工姓名") + private String worksName; + + public Date getInstorageTime() { + return instorageTime; + } + + public void setInstorageTime(Date instorageTime) { + this.instorageTime = instorageTime; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public BigDecimal getProductNum() { + return productNum; + } + + public void setProductNum(BigDecimal productNum) { + this.productNum = productNum; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public BigDecimal getAvgAmount() { + return avgAmount; + } + + public void setAvgAmount(BigDecimal avgAmount) { + this.avgAmount = avgAmount; + } + + public Integer getWorkerNum() { + return workerNum; + } + + public void setWorkerNum(Integer workerNum) { + this.workerNum = workerNum; + } + + public BigDecimal getWorkTime() { + return workTime; + } + + public void setWorkTime(BigDecimal workTime) { + this.workTime = workTime; + } + + public String getWorksName() { + return worksName; + } + + public void setWorksName(String worksName) { + this.worksName = worksName; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public Long getWoId() { + return woId; + } + + public void setWoId(Long woId) { + this.woId = woId; + } + + @Override + public String toString() { + return "ExportBaohuoVo{" + + "instorageTime=" + instorageTime + + ", name='" + name + '\'' + + ", content='" + content + '\'' + + ", unit='" + unit + '\'' + + ", productNum=" + productNum + + ", price=" + price + + ", amount=" + amount + + ", avgAmount=" + avgAmount + + ", workerNum=" + workerNum + + ", workTime=" + workTime + + ", worksName='" + worksName + '\'' + + '}'; + } +} + diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java index be7a03c..3920e56 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/mapper/PayDayWorkHoursMapper.java @@ -15,5 +15,5 @@ import java.util.List; */ public interface PayDayWorkHoursMapper extends BaseMapperPlus { - List selectSgrDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery); + List selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery); } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java index e2e685f..74dbc44 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayDayWorkHoursServiceImpl.java @@ -115,7 +115,7 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService { return baseMapper.deleteBatchIds(ids) > 0; } - public List selectSgrDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery) { - return baseMapper.selectSgrDayWorkHoursList2(sgrDayWorkHoursQuery); + public List selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery) { + return baseMapper.selectPayDayWorkHoursList2(sgrDayWorkHoursQuery); } } diff --git a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java index 122f949..0d7b0a3 100644 --- a/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java +++ b/ruoyi-pay/src/main/java/com/ruoyi/pay/service/impl/PayWorkOrderBaohuoServiceImpl.java @@ -231,7 +231,7 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService PayDayWorkHoursQuery sgrDayWorkHoursQuery = new PayDayWorkHoursQuery(); sgrDayWorkHoursQuery.setDate(sgrWorkTime.getDate()); sgrDayWorkHoursQuery.setEmployeeId(employee.getEmpId()); - List queryList = dayWorkHoursService.selectSgrDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时 + List queryList = dayWorkHoursService.selectPayDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时 for (PayDayWorkHoursQuery query : queryList) { List dwHoursContrasts = query.getDwHoursContrasts(); for (PayDwHoursContrast dwHoursContrast : dwHoursContrasts) { @@ -423,7 +423,7 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService PayDayWorkHoursQuery sgrDayWorkHoursQuery = new PayDayWorkHoursQuery(); sgrDayWorkHoursQuery.setDate(sgrWorkTime.getDate()); sgrDayWorkHoursQuery.setEmployeeId(employee.getEmpId()); - List queryList = dayWorkHoursService.selectSgrDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时 + List queryList = dayWorkHoursService.selectPayDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时 for (PayDayWorkHoursQuery query : queryList) { List dwHoursContrasts = query.getDwHoursContrasts(); for (PayDwHoursContrast dwHoursContrast : dwHoursContrasts) { diff --git a/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml b/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml index e4f3315..1a00446 100644 --- a/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml +++ b/ruoyi-pay/src/main/resources/mapper/pay/PayDayWorkHoursMapper.xml @@ -18,6 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -25,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -36,12 +37,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select d.*,c.start_time con_start,c.end_time con_end,c.is_helper con_helper,c.hours con_hours,c.salesman con_salesman from pay_day_work_hours d join pay_dw_hours_contrast c on d.id=c.dw_hours_id /* select d.* from sgr_day_work_hours d inner join sgr_dw_hours_contrast c on d.id=c.dw_hours_id*/ and d.dept_id = #{deptId} + and d.tenant_id = #{tenantId} and d.dept_name like concat('%', #{deptName}, '%') and employee_id = #{employeeId} and emp_name like concat('%', #{empName}, '%') @@ -52,4 +54,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + +