Merge remote-tracking branch 'origin/master'

master
wanglei 7 months ago
commit 0595ac231c

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.ruoyi.pay.domain.vo.ExportBaohuoVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*; import javax.validation.constraints.*;

@ -74,7 +74,7 @@ public class PayWorkOrderBaohuoController extends BaseController {
@Log(title = "包活派工单", businessType = BusinessType.EXPORT) @Log(title = "包活派工单", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(PayWorkOrderBaohuoBo bo, HttpServletResponse response) { public void export(PayWorkOrderBaohuoBo bo, HttpServletResponse response) {
List<PayWorkOrderBaohuoVo> list = iPayWorkOrderBaohuoService.queryList(bo); List<PayWorkOrderBaohuoVo> list = iPayWorkOrderBaohuoService.getWorkOrderListByDate(bo.getExportDate());
list.stream().parallel().forEach(vo -> { list.stream().parallel().forEach(vo -> {
vo.setAvgAmount(vo.getAmount().divide(new BigDecimal(vo.getWorkerNum()), 2, RoundingMode.HALF_UP)); 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)); vo.setWorkTime(vo.getWorkTime().divide(new BigDecimal(vo.getWorkerNum()), 2,RoundingMode.HALF_UP));

@ -0,0 +1,181 @@
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
*/
private Long tenantId;
/**
* 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<PayDwHoursContrast> 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<PayDwHoursContrast> getDwHoursContrasts() {
return dwHoursContrasts;
}
public void setDwHoursContrasts(List<PayDwHoursContrast> dwHoursContrasts) {
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)
.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();
}
}

@ -24,7 +24,7 @@ public class PayButieBo extends BaseEntity {
/** /**
* *
*/ */
@NotNull(message = "主键不能为空", groups = { EditGroup.class }) // @NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id; private Long id;
/** /**
@ -54,13 +54,13 @@ public class PayButieBo extends BaseEntity {
/** /**
* 0- 1- * 0- 1-
*/ */
@NotNull(message = "删除标志0-可用 1-删除)不能为空", groups = { AddGroup.class, EditGroup.class }) //@NotNull(message = "删除标志0-可用 1-删除)不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer deleted; private Integer deleted;
/** /**
* *
*/ */
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark; private String remark;

@ -25,7 +25,7 @@ public class PayRequireAttendanceReportBo extends BaseEntity {
/** /**
* *
*/ */
@NotNull(message = "主键不能为空", groups = { EditGroup.class }) // @NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id; 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; 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; private BigDecimal attendanceHours;
/** /**
* *
*/ */
@NotNull(message = "加班小时数不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "加班小时数不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal overtimeHours; private BigDecimal overtimeHours;
/** /**
* *
*/ */
@NotNull(message = "放假天数不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "放假天数不能为空", groups = { AddGroup.class, EditGroup.class })
private Long holidays; private Long holidays;
/** /**
* *
*/ */
@NotNull(message = "放假小时数不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "放假小时数不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal holidayHours; private BigDecimal holidayHours;
/** /**
* *
*/ */
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal leaveDays; private BigDecimal leaveDays;
/** /**
* *
*/ */
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark; private String remark;

@ -2,6 +2,9 @@ package com.ruoyi.pay.domain.bo;
import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup; 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.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.*; import javax.validation.constraints.*;
@ -10,6 +13,8 @@ import java.util.Date;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
@ -156,5 +161,19 @@ public class PayWorkOrderBaohuoBo extends BaseEntity {
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark; private String remark;
// 产品列表
private List<PayBaohuoProduct> prodList;
// 员工列表
private List<PayBaohuoEmployee> empList;
// 工时列表
private List<PayBaohuoWorktime> worktimeList;
// 导出日期
private Date exportDate;
} }

@ -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 + '\'' +
'}';
}
}

@ -1,9 +1,12 @@
package com.ruoyi.pay.mapper; package com.ruoyi.pay.mapper;
import com.ruoyi.pay.domain.PayDayWorkHours; import com.ruoyi.pay.domain.PayDayWorkHours;
import com.ruoyi.pay.domain.PayDayWorkHoursQuery;
import com.ruoyi.pay.domain.vo.PayDayWorkHoursVo; import com.ruoyi.pay.domain.vo.PayDayWorkHoursVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus; import com.ruoyi.common.core.mapper.BaseMapperPlus;
import java.util.List;
/** /**
* Mapper * Mapper
* *
@ -12,4 +15,5 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
*/ */
public interface PayDayWorkHoursMapper extends BaseMapperPlus<PayDayWorkHoursMapper, PayDayWorkHours, PayDayWorkHoursVo> { public interface PayDayWorkHoursMapper extends BaseMapperPlus<PayDayWorkHoursMapper, PayDayWorkHours, PayDayWorkHoursVo> {
List<PayDayWorkHoursQuery> selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery);
} }

@ -3,6 +3,11 @@ package com.ruoyi.pay.mapper;
import com.ruoyi.pay.domain.PayWorkOrderBaohuo; import com.ruoyi.pay.domain.PayWorkOrderBaohuo;
import com.ruoyi.pay.domain.vo.PayWorkOrderBaohuoVo; import com.ruoyi.pay.domain.vo.PayWorkOrderBaohuoVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus; 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 * Mapper
@ -11,5 +16,14 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
* @date 2025-05-12 * @date 2025-05-12
*/ */
public interface PayWorkOrderBaohuoMapper extends BaseMapperPlus<PayWorkOrderBaohuoMapper, PayWorkOrderBaohuo, PayWorkOrderBaohuoVo> { public interface PayWorkOrderBaohuoMapper extends BaseMapperPlus<PayWorkOrderBaohuoMapper, PayWorkOrderBaohuo, PayWorkOrderBaohuoVo> {
@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<PayWorkOrderBaohuoVo> getWorkOrderListByDate(Date exportDate);
} }

@ -9,6 +9,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -50,4 +51,6 @@ public interface IPayWorkOrderBaohuoService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
R<List<PaySalaryReport>> baohuoSum(String date, Long deptId,Long tenantId); R<List<PaySalaryReport>> baohuoSum(String date, Long deptId,Long tenantId);
List<PayWorkOrderBaohuoVo> getWorkOrderListByDate(Date exportDate);
} }

@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.pay.domain.PayDayWorkHoursQuery;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.pay.domain.bo.PayDayWorkHoursBo; import com.ruoyi.pay.domain.bo.PayDayWorkHoursBo;
@ -113,4 +114,8 @@ public class PayDayWorkHoursServiceImpl implements IPayDayWorkHoursService {
} }
return baseMapper.deleteBatchIds(ids) > 0; return baseMapper.deleteBatchIds(ids) > 0;
} }
public List<PayDayWorkHoursQuery> selectPayDayWorkHoursList2(PayDayWorkHoursQuery sgrDayWorkHoursQuery) {
return baseMapper.selectPayDayWorkHoursList2(sgrDayWorkHoursQuery);
}
} }

@ -1,27 +1,34 @@
package com.ruoyi.pay.service.impl; package com.ruoyi.pay.service.impl;
import cn.hutool.core.bean.BeanUtil; 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.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.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.pay.domain.PayBaohuoWorktime; import com.ruoyi.pay.domain.*;
import com.ruoyi.pay.domain.PaySalaryReport; import com.ruoyi.pay.domain.bo.*;
import com.ruoyi.pay.domain.bo.PayEmployeeInfoBo; import com.ruoyi.pay.domain.vo.*;
import com.ruoyi.pay.domain.vo.PayEmployeeInfoVo;
import com.ruoyi.pay.mapper.PayBaohuoWorktimeMapper; 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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; 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.mapper.PayWorkOrderBaohuoMapper;
import com.ruoyi.pay.service.IPayWorkOrderBaohuoService; import com.ruoyi.pay.service.IPayWorkOrderBaohuoService;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@ -39,6 +46,14 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService
private final PayWorkOrderBaohuoMapper baseMapper; private final PayWorkOrderBaohuoMapper baseMapper;
private final PayEmployeeInfoServiceImpl payEmployeeInfoService; private final PayEmployeeInfoServiceImpl payEmployeeInfoService;
private final PayBaohuoWorktimeMapper worktimeMapper; 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 @Override
@Transactional
public Boolean insertByBo(PayWorkOrderBaohuoBo bo) { public Boolean insertByBo(PayWorkOrderBaohuoBo bo) {
List<PayBaohuoWorktime> worktimeList = bo.getWorktimeList();
List<PayBaohuoProduct> prodList = bo.getProdList();
List<PayBaohuoEmployee> 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<PayWorkTimeVo> 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<PayBaohuoWorktimeVo> 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<PayAttendanceVo> 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<PayDayWorkHoursQuery> queryList = dayWorkHoursService.selectPayDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时
for (PayDayWorkHoursQuery query : queryList) {
List<PayDwHoursContrast> 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); PayWorkOrderBaohuo add = BeanUtil.toBean(bo, PayWorkOrderBaohuo.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0; int i = baseMapper.insert(add);
if (flag) { if (i<0) {
bo.setId(add.getId()); 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 @Override
public Boolean updateByBo(PayWorkOrderBaohuoBo bo) { public Boolean updateByBo(PayWorkOrderBaohuoBo bo) {
List<PayBaohuoWorktime> worktimeList = bo.getWorktimeList();
List<PayBaohuoProduct> prodList = bo.getProdList();
List<PayBaohuoEmployee> 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<PayWorkTimeVo> 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<PayBaohuoWorktimeVo> 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<PayAttendanceVo> 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<PayDayWorkHoursQuery> queryList = dayWorkHoursService.selectPayDayWorkHoursList2(sgrDayWorkHoursQuery); // 获取日工工时
for (PayDayWorkHoursQuery query : queryList) {
List<PayDwHoursContrast> 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); PayWorkOrderBaohuo update = BeanUtil.toBean(bo, PayWorkOrderBaohuo.class);
validEntityBeforeSave(update); LambdaQueryWrapper<PayWorkOrderBaohuo> lqw = buildQueryWrapper(bo);
return baseMapper.updateById(update) > 0; return baseMapper.update(update,lqw)>0;
} }
/** /**
@ -131,6 +505,12 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService
if(isValid){ if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
for (Long id : ids) {
// 删除包活工单下对应的员工表数据、产品数据、工时数据
baseMapper.deleteAllProdByWoId(id);
baseMapper.deleteAllEmpByWoId(id);
baseMapper.deleteAllWorkTimeByWoId(id);
}
return baseMapper.deleteBatchIds(ids) > 0; return baseMapper.deleteBatchIds(ids) > 0;
} }
@ -184,4 +564,9 @@ public class PayWorkOrderBaohuoServiceImpl implements IPayWorkOrderBaohuoService
return R.ok(result); return R.ok(result);
} }
@Override
public List<PayWorkOrderBaohuoVo> getWorkOrderListByDate(Date exportDate) {
return sgrWorkOrderBaohuoMapper.getWorkOrderListByDate(exportDate);
}
} }

@ -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);
}
}

@ -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;
}
/**
* 12
* @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);
}
}

@ -16,5 +16,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="note" column="note"/> <result property="note" column="note"/>
</resultMap> </resultMap>
<resultMap type="PayDayWorkHoursQuery" id="PayDayWorkHoursQueryResult">
<result property="id" column="id" />
<result property="tenantId" column="tenant_id"/>
<result property="deptId" column="dept_id" />
<result property="deptName" column="dept_name" />
<result property="employeeId" column="employee_id" />
<result property="empName" column="emp_name" />
<result property="date" column="date" />
<result property="dwYearMonth" column="dw_year_month" />
<result property="note" column="note" />
<collection property="dwHoursContrasts" ofType="PayDwHoursContrast">
<result property="startTime" column="con_start" />
<result property="endTime" column="con_end" />
<result property="isHelper" column="con_helper" />
<result property="deptId" column="con_dept_id" />
<result property="deptName" column="con_dept_name" />
<result property="hours" column="con_hours" />
<result property="salesman" column="con_salesman" />
</collection>
</resultMap>
<select id="selectPayDayWorkHoursList2" parameterType="PayDayWorkHoursQuery" resultMap="PayDayWorkHoursQueryResult">
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*/
<where>
<if test="deptId != null "> and d.dept_id = #{deptId}</if>
<if test="tenantId != null "> and d.tenant_id = #{tenantId}</if>
<if test="deptName != null and deptName != ''"> and d.dept_name like concat('%', #{deptName}, '%')</if>
<if test="employeeId != null "> and employee_id = #{employeeId}</if>
<if test="empName != null and empName != ''"> and emp_name like concat('%', #{empName}, '%')</if>
<if test="date != null "> and date = #{date}</if>
<if test="dwYearMonth != null and dwYearMonth != ''"> and `dw_year_month` = #{dwYearMonth}</if>
<if test="salesman != null and salesman != ''"> and c.`salesman` = #{salesman}</if>
<if test="note != null and note != ''"> and note = #{note}</if>
</where>
</select>
<!-- <select id="selectVoPage2" parameterType="PayDayWorkHoursBo" resultMap="PayDayWorkHoursQueryResult">
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
${ew.customSqlSegment}
</select>-->
</mapper> </mapper>

@ -33,5 +33,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="remark" column="remark"/> <result property="remark" column="remark"/>
</resultMap> </resultMap>
<resultMap type="ExportBaohuoVo" id="ExportBaohuoVoResult">
<result property="instorageTime" column="instorage_time" />
<result property="woId" column="wo_id" />
<result property="name" column="name" />
<result property="productName" column="product_name" />
<result property="content" column="content" />
<result property="unit" column="unit" />
<result property="productNum" column="product_num" />
<result property="price" column="price" />
<result property="amount" column="amount" />
<result property="avgAmount" column="avg_amount" />
<result property="workerNum" column="worker_num" />
<result property="workTime" column="work_time" />
<result property="worksName" column="works_name" />
</resultMap>
<select id="getWorkOrderListByDate" parameterType="date" resultMap="ExportBaohuoVoResult">
SELECT b.instorage_time, b.`name`, a.product_name,b.content,a.unit,a.product_num,a.price,a.amount,a.wo_id,
(SELECT count(*) FROM pay_baohuo_employee WHERE wo_id = b.id) as worker_num,
(SELECT sum(valid_hours) FROM pay_baohuo_worktime WHERE wo_id = b.id) AS work_time,
(SELECT GROUP_CONCAT(emp_name) FROM pay_baohuo_employee WHERE wo_id = b.id) AS works_name
FROM pay_baohuo_product a
LEFT JOIN pay_work_order_baohuo b ON a.wo_id = b.id
WHERE date_format(#{exportDate},'%y%m') = date_format(b.instorage_time,'%y%m')
ORDER BY a.wo_id ASC
</select>
</mapper> </mapper>

Loading…
Cancel
Save