package com.oaker.hours.service.impl;
import com.baomidou.mybatisplus.enums.SqlLike;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.oaker.common.config.AppConfig;
import com.oaker.common.constant.HttpStatus;
import com.oaker.common.core.domain.entity.SysUser;
import com.oaker.common.core.domain.model.LoginUser;
import com.oaker.common.core.page.TableDataInfo;
import com.oaker.common.exception.ServiceException;
import com.oaker.common.utils.DateUtils;
import com.oaker.common.utils.FestivalsUtil;
import com.oaker.common.utils.SecurityUtils;
import com.oaker.hours.doman.columns.Columns;
import com.oaker.hours.doman.dto.ProjectHourStatMonthDetailDTO;
import com.oaker.hours.doman.dto.ProjectSubHour;
import com.oaker.hours.doman.dto.UserHourSaveDTO;
import com.oaker.hours.doman.dto.UserHourUpdateDTO;
import com.oaker.hours.doman.entity.*;
import com.oaker.hours.doman.vo.ProjectHourStatMonthDetail;
import com.oaker.hours.doman.vo.UserHourCalendarVO;
import com.oaker.hours.doman.vo.UserHourDetailVO;
import com.oaker.hours.doman.vo.UserHourExportVO;
import com.oaker.hours.doman.vo.UserHourListVO;
import com.oaker.hours.doman.vo.UserHourProjectStat;
import com.oaker.hours.doman.vo.UserHourStatDetailVO;
import com.oaker.hours.doman.vo.UserHourStatVO;
import com.oaker.hours.doman.vo.UserProjectShortVO;
import com.oaker.hours.enums.LeaveTypeEnum;
import com.oaker.hours.enums.ProjectStatusEnum;
import com.oaker.hours.enums.UserHourFillStatusEnum;
import com.oaker.hours.mapper.MhUserHourMapper;
import com.oaker.hours.service.MhHourDetailSubService;
import com.oaker.hours.service.MhUserHourService;
import com.oaker.system.domain.SysPost;
import com.oaker.system.service.SysHolidayService;
import com.oaker.system.service.impl.SysPostServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;
/**
* @Description :
* <功能详细描述>
* @author: 须尽欢_____
* @Data : 2021/9/13 14:26
*/
@Service
public class MhUserHourServiceImpl extends ServiceImpl<MhUserHourMapper, MhUserHour> implements MhUserHourService {
@Resource
private SysPostServiceImpl postService;
@Resource
private ProjectServiceImpl projectService;
@Resource
private MhUserLeaveServiceImpl userLeaveService;
@Resource
private ProjectHourServiceImpl projectHourService;
@Resource
private MhHourDetailSubService mhHourDetailSubService;
@Resource
private MhHourDetailServiceImpl hourDetailService;
@Resource
private ProjectUserServiceImpl projectUserService;
@Resource
private MhUserHourMissServiceImpl userHourMissService;
@Resource
private SysHolidayService sysHolidayService;
/**
* 1. 写入mh_user_hour 用户工时填报表
* 2. 写入mh_hour_detail工时填报详情表
* 3. 更新mh_project_hour表中已用工时
* 4. 如果mh_user_hour_miss用户缺报记录表 有缺报记录 则执行删除
*
* @param userHourSaveDTO
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean create(UserHourSaveDTO userHourSaveDTO) {
Long userId = SecurityUtils.getUserId();
EntityWrapper<MhUserHour> queryWrapper = new EntityWrapper<>();
queryWrapper.eq(Columns.MhUserHour.fillDate, userHourSaveDTO.getDate())
.eq(Columns.MhUserHour.userId, userId);
Integer count = baseMapper.selectCount(queryWrapper);
if (count > 0) {
throw new ServiceException("当前日期已经填报工时,请勿重复提交");
}
List<UserHourSaveDTO.ProjectHour> projectHours = userHourSaveDTO.getProjectHours();
BigDecimal total = projectHours.stream()
.map(UserHourSaveDTO.ProjectHour::getHour)
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 工时总数判断
if (total.compareTo(new BigDecimal("24")) > 0) {
throw new ServiceException("工时总数不能超过24");
}
if (total.compareTo(AppConfig.WORK_TIME) > 0 && !AppConfig.OVERTIME_ALLOW) {
throw new ServiceException("提交工时总数超过限定值");
}
LocalDate fillDate = userHourSaveDTO.getDate();
Date createTime = new Date();
MhUserHour userHour = new MhUserHour();
userHour.setUserId(userId)
.setFillDate(fillDate)
.setTotalHour(total)
.setCreateTime(createTime);
// 1. 写入mh_user_hour 用户工时填报表
baseMapper.insert(userHour);
ProjectUser projectUser;
MhHourDetail mhHourDetail;
// 2. 写入mh_hour_detail工时填报详情表
for (UserHourSaveDTO.ProjectHour projectHour : projectHours) {
mhHourDetail = new MhHourDetail();
MhProject mhProject = projectService.selectById(projectHour.getProjectId());
EntityWrapper<ProjectUser> wrapper = new EntityWrapper<>();
wrapper.eq(Columns.ProjectUser.projectId, projectHour.getProjectId())
.and()
.eq(Columns.ProjectUser.userId, userId);
projectUser = projectUserService.selectOne(wrapper);
mhHourDetail.setProjectId(projectHour.getProjectId())
.setUserId(userId)
.setUseHour(projectHour.getHour())
.setFillDate(fillDate)
.setProjectStatus(mhProject.getProjectStatus())
.setHourId(userHour.getId())
.setEveryday(projectUser.getEveryday())
.setDaily(projectHour.getDaily())
.setCreateTime(createTime);
hourDetailService.insert(mhHourDetail);
Long detailId =mhHourDetail.getId() ;
List<ProjectSubHour> workTypeHourList = projectHour.getWorkTypeHourList();
insertDetailSub(detailId,workTypeHourList);
// 3. 更新mh_project_hour表中已用工时
projectHourService.addTotalHour(projectHour.getProjectId(), projectHour.getHour());
}
// 4. 如果mh_user_hour_miss用户缺报记录表 有缺报记录 则执行删除
EntityWrapper<MhUserHourMiss> wrapper = new EntityWrapper<>();
wrapper.eq(Columns.MhUserHourMiss.userId, userId)
.eq(Columns.MhUserHourMiss.missDate, fillDate);
MhUserHourMiss mhUserHourMiss = userHourMissService.selectOne(wrapper);
if (!Objects.isNull(mhUserHourMiss)) {
userHourMissService.deleteByIdAndDetail(mhUserHourMiss.getId());
}
return Boolean.TRUE;
}
private void insertDetailSub(Long detailId,List<ProjectSubHour> workTypeHourList){
if(CollectionUtils.isEmpty(workTypeHourList)){
return;
}
List<MhHourDetailSub> subList = new ArrayList<>();
for(ProjectSubHour subHour:workTypeHourList){
MhHourDetailSub sub = new MhHourDetailSub();
sub.setDetailId(detailId);
sub.setWorkTypeId(subHour.getWorkTypeId());
sub.setUseHour(subHour.getHour());
sub.setCreateTime(new Date());
subList.add(sub);
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于JAVA springboot + MYSQL +VUE的项目管理系统(含数据库),包括工时统计、原型预览、效果图管理等
共1055个文件
java:410个
js:149个
vue:132个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 11 下载量 85 浏览量
2022-12-23
15:18:43
上传
评论 4
收藏 9.63MB ZIP 举报
温馨提示
基于JAVA springboot + MYSQL +VUE的项目管理系统,包括工时统计、原型预览、效果图管理等功能 无鱼工时管理系统,是一款轻量级工时记录和管理工具,包括项目管理,工时上报,工时日报,工时统计等功能。 无鱼工时管理系统可通过员工工时上报的方式,来记录项目所花费的工时,帮助企业进行项目工时统计、核算人工成本。实时、动态、真实的展示项目投入
资源推荐
资源详情
资源评论
收起资源包目录
基于JAVA springboot + MYSQL +VUE的项目管理系统(含数据库),包括工时统计、原型预览、效果图管理等 (1055个子文件)
package.bat 185B
run-web.bat 139B
build.bat 109B
app.183cabda.css 463KB
chunk-libs.5c4d5e89.css 216KB
chunk-67224715.a9686c5b.css 43KB
main.css 32KB
main.css 32KB
font-awesome.min.css 28KB
font-awesome.min.css 28KB
chunk-2f8c138d.7e181e7b.css 25KB
chunk-732ca988.cf54ef51.css 5KB
chunk-0d51b672.a9e3f56c.css 3KB
reset.min.css 3KB
chunk-29d4f9ab.c25fb348.css 2KB
chunk-7dea9312.1bcadf38.css 1KB
chunk-4dc6f30c.b9f0d51c.css 1KB
chunk-2377759b.168570ad.css 1023B
chunk-b0642bca.1d37510a.css 1018B
chunk-fedca432.a4bf2070.css 990B
chunk-1e98827e.406c4cb2.css 966B
chunk-6e21fd42.f6085b35.css 911B
chunk-807a505a.9572dedd.css 877B
chunk-121f8090.856bae6c.css 815B
chunk-c3c2b388.9183fc08.css 745B
chunk-cc66e958.fe0c642a.css 664B
chunk-9779e81a.d52e0e77.css 519B
chunk-4a3ec761.60787b76.css 496B
ie9.css 454B
ie9.css 454B
noscript.css 205B
noscript.css 205B
chunk-6d83ca72.461a46e4.css 28B
.editorconfig 514B
fontawesome-webfont.eot 75KB
fontawesome-webfont.eot 75KB
.eslintignore 298B
OAK_defalutImg.gif 633KB
401.gif 160KB
401.089007e7.gif 160KB
.gitignore 291B
ie.html 23KB
ie.html 23KB
index.html 11KB
index.html 5KB
404.html 1KB
404.html 1KB
favicon.ico 4KB
MhUserHourServiceImpl.java 40KB
ExcelUtil.java 38KB
ProjectHourServiceImpl.java 28KB
Convert.java 24KB
HTMLFilter.java 19KB
UUID.java 15KB
SysUserServiceImpl.java 14KB
SysMenuServiceImpl.java 14KB
ReflectUtils.java 14KB
StringUtils.java 13KB
ProjectHourController.java 12KB
FileUtils.java 12KB
ProjectUserServiceImpl.java 11KB
MhCostServiceImpl.java 10KB
SysUserController.java 10KB
SysRoleServiceImpl.java 10KB
PrPrototypeServiceImpl.java 10KB
MhUserHourController.java 9KB
MhUserHourMissServiceImpl.java 9KB
ProjectHourApi.java 9KB
Base64.java 9KB
HttpUtils.java 8KB
SysDeptServiceImpl.java 8KB
ProjectController.java 8KB
SysRoleController.java 8KB
LogAspect.java 8KB
FileUploadUtils.java 8KB
SysUser.java 8KB
IndexServiceImpl.java 7KB
PrSketchServiceImpl.java 7KB
FestivalsUtil.java 7KB
ExcelUtils.java 7KB
SysJobServiceImpl.java 6KB
VerifyCodeUtils.java 6KB
Server.java 6KB
SecurityConfig.java 6KB
TokenService.java 6KB
SysConfigServiceImpl.java 6KB
RedisCache.java 6KB
SysDictTypeServiceImpl.java 6KB
SysJobController.java 6KB
SysRole.java 5KB
DataScopeAspect.java 5KB
MhUserHourApi.java 5KB
IpUtils.java 5KB
SysDeptController.java 5KB
BaseController.java 5KB
SysProfileController.java 5KB
DateUtils.java 5KB
JobInvokeUtil.java 5KB
SysMenu.java 5KB
MhUserLeaveServiceImpl.java 5KB
共 1055 条
- 1
- 2
- 3
- 4
- 5
- 6
- 11
Python代码大全
- 粉丝: 2747
- 资源: 687
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页