package com.controller;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.StringUtil;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ChuqinEntity;
import com.service.ChuqinService;
import com.entity.view.ChuqinView;
import com.service.YonghuService;
import com.entity.YonghuEntity;
import com.utils.PageUtils;
import com.utils.R;
/**
* 考勤
* 后端接口
* @author
* @email
* @date 2021-02-25
*/
@RestController
@Controller
@RequestMapping("/chuqin")
public class ChuqinController {
private static final Logger logger = LoggerFactory.getLogger(ChuqinController.class);
@Autowired
private ChuqinService chuqinService;
@Autowired
private TokenService tokenService;
//级联表service
@Autowired
private YonghuService yonghuService;
//字典表map
Map<String, Map<Integer, String>> dictionaryMap;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(StringUtil.isNotEmpty(role) && "用户".equals(role)){
params.put("yonghuId",request.getSession().getAttribute("userId"));
}
PageUtils page = chuqinService.queryPage(params);
//字典表数据转换
List<ChuqinView> list =(List<ChuqinView>)page.getList();
ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
dictionaryMap = (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
for(ChuqinView c:list){
this.dictionaryConvert(c);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ChuqinEntity chuqin = chuqinService.selectById(id);
if(chuqin !=null){
//entity转view
ChuqinView view = new ChuqinView();
BeanUtils.copyProperties( chuqin , view );//把实体数据重构到view中
//级联表
YonghuEntity yonghu = yonghuService.selectById(chuqin.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
}
//字典表字典转换
ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
dictionaryMap = (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
this.dictionaryConvert(view);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 打卡
*/
@RequestMapping("/clockIn")
public R clockIn(String flag, HttpServletRequest request){
logger.debug("clockIn方法:,,Controller:{},,flag:{}",this.getClass().getName(),flag);
try {
Integer id = (Integer)request.getSession().getAttribute("userId");
String role = String.valueOf(request.getSession().getAttribute("role"));
if(StringUtil.isEmpty(role) || "管理员".equals(role)){
return R.error(511,"没有打卡权限");
}
Date d = new Date();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date = format1.format(d);
List<ChuqinEntity> chuqinList = new ArrayList<ChuqinEntity>();//要生成的list数据
List<String> s = new ArrayList<>();
s.add("yonghu_id+0");
Wrapper<ChuqinEntity> queryWrapper3 = new EntityWrapper<ChuqinEntity>().eq("yonghu_id",id).orderDesc(s);
List<ChuqinEntity> oldChuqinList = chuqinService.selectList(queryWrapper3);
if("1".equals(flag)){
//上班卡
Date date1 = new Date();
date1.setHours(8);
date1.setMinutes(0);
date1.setSeconds(0);
//上班打卡
//新增前先查看当前用户最大打卡时间
if(oldChuqinList != null && oldChuqinList.size()>0){
ChuqinEntity entity = oldChuqinList.get(0);
String today = entity.getToday();//获取出勤表最大出勤
//把日期加一天
Date todayTime = format1.parse(today);
Calendar calendar = new GregorianCalendar();
calendar.setTime(todayTime);
calendar.add(calendar.DATE,1);
String newToday = format1.format(calendar.getTime());
if(date.equals(today)){
return R.error(511,"已经打过上班卡了");
}else if(!date.equals(newToday)){//当天日期 不是出勤最大日期加一天的话 就是补充缺勤日期
chuqinList = this.getQueQin(d, format1, today, id);
}
if(chuqinList !=null && chuqinList.size() >0){
chuqinService.insertBatch(chuqinList);
}
//插入当天的上班卡
ChuqinEntity chuqin = new ChuqinEntity();
chuqin.setOnTime(d);
if(d.compareTo(date1)>0){//当前时间d 大于规定时间date1
chuqin.setChuqinTypes(6);//设置为迟到
}else if(d.compareTo(date1)<=0){//当前时间d 小于等于规定时间date1
chuqin.setChuqinTypes(3);//设置为未打下班卡
}
chuqin.setCreateTime(d);
chuqin.setToday(date);
chuqin.setYonghuId(id);
chuqinService.insert(chuqin);
}else{
//第一次打卡
ChuqinEntity chuqin = new ChuqinEntity();
chuqin.setOnTime(d);
if(d.compareTo(date1)>0){//当前时间d 大于规定时间date1
chuqin.setChuqinTypes(6);//设置为迟到
}else if(d.compareTo(date1)<=0){//当前时间d 小于等于规定时间date1
chuqin.setChuqinTypes(3);//设置为未打下班卡
}
chuqin.setCreateTime(d);
chuqin.setToday(date);
chuqin.setYonghuId(id);
chuqinService.insert(chuqin);
}
}else if("2".equals(flag)){
//下班卡
Date date1 = new Date();
date1.setHours(19);
date1.setMinutes(00);
date1.setSeconds(0);
Date date2 = new Date();
date2.setHours(18);
date2.setMinutes(

code.song
- 粉丝: 1121
最新资源
- 1105931818_Vue2-todoList_28016_1755687717884.zip
- DataSpider万能爬虫框架_第三方开发者可实例化Spider类进行数据抓取与存储操作_支持自定义规则和存储功能_适用于快速构建爬虫项目_基于Python开发_提供简单复制导入.zip
- nowszhao_Kumarajiva-API_27288_1755687718616.zip
- Cordova插件实现Android系统权限申请与管理的跨平台解决方案_存储权限动态申请_未知来源应用安装权限检测_应用安装流程适配_应用强制退出功能_Android60及以上版.zip
- lulu-lucky-66_Smart-warehousing_24944_1755684052786.zip
- 基于MinIO对象存储服务的容器化部署与自动化测试平台_实现Docker容器编排的MinIO服务器配置和Python脚本驱动的随机图片生成上传功能_用于验证存储容量限制机制和系统在.zip
- 智能仓储系统_基于物联网技术和人工智能算法的仓库管理平台_实现库存实时监控货物智能分拣自动化盘点以及数据分析预测优化仓储效率降低运营成本提升供应链响应速度_适用于电商物流制造业等行.zip
- 基于Nextjs框架构建的现代化全栈Web应用开发项目_包含自动字体优化热重载开发服务器Vercel无缝部署TypeScript支持页面路由系统API路由功能静态生成.zip
- 软通动力参赛作品计步新闻音乐计划轨迹存储显示项目_计步器新闻阅读器音乐播放器计划管理轨迹记录数据存储用户界面_提供个人健康管理日常信息获取休闲娱乐及行程规划的多功能集成平台_And.zip
- 基于C++实现的运动控制算法LQR+源码+项目文档(毕业设计&课程设计&项目开发)
- 一个基于Python和Flask框架搭建的轻量级静态文件存储服务器支持HTTP协议上传下载和基本文件管理功能目前处于初级开发阶段但已具备基础可用性_静态资源托管多格式文件支持.zip
- 基于人工智能的智能寻物助手项目_物品定位_图像识别_语音交互_实时追踪_多设备同步_智能提醒_云端存储_用户管理_物品分类_丢失预警_位置记录_数据分析_个性化推荐_社区共享_物品.zip
- GoFrame单仓库快速开发模板项目_提供基于GoFrame框架的标准化项目结构配置与最佳实践示例_包含模块化设计依赖管理配置文件解析数据库操作封装日志记录中间件集成A.zip
- 基于Nuxtjs框架构建的现代化全栈Web应用开发项目_包含服务端渲染静态站点生成热重载开发服务器生产环境构建优化自动化部署流程_旨在为开发者提供高效可扩展的企业级应用.zip
- 基于ServiceLoader的OkHttp网络请求监控拦截解析分发存储上报组件化开发框架_网络请求监控拦截器数据解析分发存储上报ServiceLoader组件化开发OkHttpR.zip
- Alfred私有云盘系统_支持多类型文件存储与分布式数据管理_通过微服务架构实现个人及企业级文件上传下载同步备份与跨平台访问_集成阿里云OSS对象存储Ceph集群部署RabbitM.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


