| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- package cn.com.lzt.attendancewarnmsg.service.impl;
- import java.io.Serializable;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
- import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
- import org.jeecgframework.core.constant.Globals;
- import org.jeecgframework.core.util.ApplicationContextUtil;
- import org.jeecgframework.core.util.DataUtils;
- import org.jeecgframework.core.util.ListUtils;
- import org.jeecgframework.core.util.MyClassLoader;
- import org.jeecgframework.core.util.StringUtil;
- import org.jeecgframework.core.util.oConvertUtils;
- import org.jeecgframework.minidao.pojo.MiniDaoPage;
- import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
- import org.jeecgframework.web.system.pojo.base.TSBaseUser;
- import org.jeecgframework.web.system.pojo.base.TSDepart;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import cn.com.lzt.attendancewarnmsg.dao.AttendanceWarnMsgMinidao;
- import cn.com.lzt.attendancewarnmsg.dto.AttendanceWarnMsgDto;
- import cn.com.lzt.attendancewarnmsg.dto.ProjectAbnormalDetailDto;
- import cn.com.lzt.attendancewarnmsg.entity.AttendanceWarnMsgEntity;
- import cn.com.lzt.attendancewarnmsg.service.AttendanceWarnMsgServiceI;
- import cn.com.lzt.attendancewarnmsgdetail.entity.AttendanceWarnMsgDetailEntity;
- import cn.com.lzt.common.push.JPushProcessor;
- import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity;
- import cn.com.lzt.userattendancedetail.dto.AttendanceDetailJsonObj;
- import cn.com.lzt.userattendancedetail.dto.UserAttendanceDetailDto;
- import cn.com.lzt.userattendancedetail.service.UserAttendanceDetailServiceI;
- import cn.com.lzt.userattendancetotal.entity.UserAttendanceTotalEntity;
- @Service("attendanceWarnMsgService")
- @Transactional
- public class AttendanceWarnMsgServiceImpl extends CommonServiceImpl implements AttendanceWarnMsgServiceI {
- @Autowired
- AttendanceWarnMsgMinidao attendanceWarnMsgMinidao;
- @Autowired
- UserAttendanceDetailServiceI userAttendanceDetailService;
-
- @Autowired
- private JPushProcessor pushProcessor;
-
-
- public void delete(AttendanceWarnMsgEntity entity) throws Exception{
- super.delete(entity);
- //执行删除操作增强业务
- this.doDelBus(entity);
- }
-
- public Serializable save(AttendanceWarnMsgEntity entity) throws Exception{
- Serializable t = super.save(entity);
- //执行新增操作增强业务
- this.doAddBus(entity);
- return t;
- }
-
- public void saveOrUpdate(AttendanceWarnMsgEntity entity) throws Exception{
- super.saveOrUpdate(entity);
- //执行更新操作增强业务
- this.doUpdateBus(entity);
- }
-
- /**
- * 新增操作增强业务
- * @param t
- * @return
- */
- private void doAddBus(AttendanceWarnMsgEntity t) throws Exception{
- //-----------------sql增强 start----------------------------
- //-----------------sql增强 end------------------------------
-
- //-----------------java增强 start---------------------------
- //-----------------java增强 end-----------------------------
- }
- /**
- * 更新操作增强业务
- * @param t
- * @return
- */
- private void doUpdateBus(AttendanceWarnMsgEntity t) throws Exception{
- //-----------------sql增强 start----------------------------
- //-----------------sql增强 end------------------------------
-
- //-----------------java增强 start---------------------------
- //-----------------java增强 end-----------------------------
- }
- /**
- * 删除操作增强业务
- * @param id
- * @return
- */
- private void doDelBus(AttendanceWarnMsgEntity t) throws Exception{
- //-----------------sql增强 start----------------------------
- //-----------------sql增强 end------------------------------
-
- //-----------------java增强 start---------------------------
- //-----------------java增强 end-----------------------------
- }
-
- private Map<String,Object> populationMap(AttendanceWarnMsgEntity t){
- Map<String,Object> map = new HashMap<String,Object>();
- map.put("id", t.getId());
- map.put("msg_type", t.getMsgType());
- map.put("msg_title", t.getMsgTitle());
- map.put("msg_content", t.getMsgContent());
- map.put("send_status", t.getSendStatus());
- map.put("org_id", t.getOrgId());
- map.put("create_date", t.getCreateDate());
- map.put("send_time", t.getSendTime());
- map.put("user_id", t.getUserId());
- return map;
- }
-
- /**
- * 替换sql中的变量
- * @param sql
- * @param t
- * @return
- */
- public String replaceVal(String sql,AttendanceWarnMsgEntity t){
- sql = sql.replace("#{id}",String.valueOf(t.getId()));
- sql = sql.replace("#{msg_type}",String.valueOf(t.getMsgType()));
- sql = sql.replace("#{msg_title}",String.valueOf(t.getMsgTitle()));
- sql = sql.replace("#{msg_content}",String.valueOf(t.getMsgContent()));
- sql = sql.replace("#{send_status}",String.valueOf(t.getSendStatus()));
- sql = sql.replace("#{org_id}",String.valueOf(t.getOrgId()));
- sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
- sql = sql.replace("#{send_time}",String.valueOf(t.getSendTime()));
- sql = sql.replace("#{user_id}",String.valueOf(t.getUserId()));
- sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
- return sql;
- }
-
- /**
- * 执行JAVA增强
- */
- private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map<String,Object> data) throws Exception {
- if(StringUtil.isNotEmpty(cgJavaValue)){
- Object obj = null;
- try {
- if("class".equals(cgJavaType)){
- //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断
- obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
- }else if("spring".equals(cgJavaType)){
- obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
- }
- if(obj instanceof CgformEnhanceJavaInter){
- CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
- javaInter.execute("t_bus_attendance_warn_msg",data);
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception("执行JAVA增强出现异常!");
- }
- }
- }
- @Override
- public MiniDaoPage<AttendanceWarnMsgDto> getAttendanceWarnMsgDtoPage(
- AttendanceWarnMsgDto attendanceWarnMsgDto, int page, int rows,
- String authSql) throws Exception {
- // TODO Auto-generated method stub
- return attendanceWarnMsgMinidao.getAttendanceWarnMsgDtoPage(attendanceWarnMsgDto, page, rows, authSql);
- }
- @Override
- public void updateAttendanceWarnMsgBytasker(String ymdDatestr ) throws Exception {
- if (oConvertUtils.isEmpty( ymdDatestr )) {
- ymdDatestr = DataUtils.date2Str(DataUtils.date_sdf);
- }
- Date ymdDate = DataUtils.str2Date(ymdDatestr, DataUtils.date_sdf);
- Calendar calendar =DataUtils.getCalendar();
- calendar.setTime(ymdDate);
- calendar.add(Calendar.DATE, -1);
- Date yesterdayDate = calendar.getTime();
- String yearmonth = DataUtils.date2Str(ymdDate,new SimpleDateFormat("yyyy-MM"));
-
- CriteriaQuery cq = new CriteriaQuery(
- ProjarrangeDetailEntity.class);
- cq.eq("yearmonth", yearmonth);
- cq.add();
- // 查询当前月份有排班记录的员工
- //计算员工当天的考勤预警信息。
- List<ProjarrangeDetailEntity> projarrangeDetailEntities = getListByCriteriaQuery( cq, false);
- if (!ListUtils.isNullOrEmpty(projarrangeDetailEntities)) {
- for (ProjarrangeDetailEntity pjde : projarrangeDetailEntities) {
- UserAttendanceTotalEntity userAttendanceTotalEntity = new UserAttendanceTotalEntity();
- userAttendanceTotalEntity.setUserId(pjde.getUserid());
- userAttendanceTotalEntity.setYearmonth(pjde.getYearmonth());
- List<UserAttendanceDetailDto> dtolist = userAttendanceDetailService.getallUsefulField(userAttendanceTotalEntity, null, ymdDate);
- saveOrUpdateWarnMsg(pjde,dtolist,ymdDate);
- }
- }
- //查询昨天是夜班的员工, 计算该员工在今天的迟到早退情况。
- projarrangeDetailEntities = attendanceWarnMsgMinidao.getSpecialDutyBydateAndDutyType(Globals.DUTYTYPE_yeban115,DataUtils.date2Str(yesterdayDate, DataUtils.date_sdf));
- if (!ListUtils.isNullOrEmpty(projarrangeDetailEntities)) {
- for (ProjarrangeDetailEntity pjde : projarrangeDetailEntities) {
- UserAttendanceTotalEntity userAttendanceTotalEntity = new UserAttendanceTotalEntity();
- userAttendanceTotalEntity.setUserId(pjde.getUserid());
- userAttendanceTotalEntity.setYearmonth(pjde.getYearmonth());
- List<UserAttendanceDetailDto> dtolist = userAttendanceDetailService.getallUsefulField(userAttendanceTotalEntity, null, yesterdayDate);
- saveOrUpdateWarnMsg(pjde,dtolist,ymdDate);
- }
- }
- //通过项目维度 统计计算预警消息
- List<ProjectAbnormalDetailDto> padtolist = attendanceWarnMsgMinidao.getProjectAbnormalDetail(ymdDatestr);
- if (!ListUtils.isNullOrEmpty(padtolist)) {
- for (ProjectAbnormalDetailDto dto :padtolist) {
- AttendanceWarnMsgEntity msgEntity = new AttendanceWarnMsgEntity();
- String msgContent = "";
- if (Globals.msg_type_chidao.equals(dto.getMsgtype())) {
- msgEntity.setMsgType(dto.getMsgtype());
- /*迟到总人数达 <span class= 'redWord '>10 </span>人 已达总人数的 <span class= 'redWord '>20 %</span>*/
- msgContent ="迟到总人数达 <span class= 'redWord '>"+dto.getErrorcount()+" </span>人 已达总人数的 <span class= 'redWord '>"+dto.getTotalpercent()+" %</span>";
- }
- if (Globals.msg_type_kuanggong.equals(dto.getMsgtype())) {
- msgEntity.setMsgType(dto.getMsgtype());
- /*旷工总人数达 <span class= 'redWord '>5 </span>人 已达总人数的 <span class= 'redWord '>10 %</span>*/
- msgContent ="旷工总人数达 <span class= 'redWord '>"+dto.getErrorcount()+" </span>人 已达总人数的 <span class= 'redWord '>"+dto.getTotalpercent()+" %</span>";
- }
- if (Globals.msg_type_zaotui.equals(dto.getMsgtype())) {
- msgEntity.setMsgType(dto.getMsgtype());
- /*早退总人数达 <span class= 'redWord '>10 </span>人 已达总人数的 <span class= 'redWord '>20 %</span>*/
- msgContent ="早退总人数达 <span class= 'redWord '>"+dto.getErrorcount()+" </span>人 已达总人数的 <span class= 'redWord '>"+dto.getTotalpercent()+" %</span>";
- }
- if (Globals.msg_type_chidaozaotui.equals(dto.getMsgtype())) {
- msgEntity.setMsgType(dto.getMsgtype());
- /*早退总人数达 <span class= 'redWord '>10 </span>人 已达总人数的 <span class= 'redWord '>20 %</span>*/
- msgContent ="既迟到又早退总人数达 <span class= 'redWord '>"+dto.getErrorcount()+" </span>人 已达总人数的 <span class= 'redWord '>"+dto.getTotalpercent()+" %</span>";
- }
-
- if (Globals.msg_type_weidaka.equals(dto.getMsgtype())) {
- msgEntity.setMsgType(dto.getMsgtype());
- /*早退总人数达 <span class= 'redWord '>10 </span>人 已达总人数的 <span class= 'redWord '>20 %</span>*/
- msgContent ="未打卡总人数达 <span class= 'redWord '>"+dto.getErrorcount()+" </span>人 已达总人数的 <span class= 'redWord '>"+dto.getTotalpercent()+" %</span>";
- }
-
- if (oConvertUtils.isNotEmpty(msgEntity.getMsgType())) {
- String projectname = "";
- if (oConvertUtils.isNotEmpty(oConvertUtils.getString(dto.getPid()))) {
- TSDepart depart = get(TSDepart.class, dto.getPid());
- if (null!=depart) {
- projectname =depart.getDepartname();
- }
- }
- msgEntity.setMsgContent(msgContent);
- msgEntity.setOrgId(dto.getPid());
- msgEntity.setMsgTitle(projectname);
- msgEntity.setSendTime(ymdDate);
- saveWarnMsg(1,msgEntity);
- }
- }
- }
- }
- private void saveOrUpdateWarnMsg(ProjarrangeDetailEntity pjde,
- List<UserAttendanceDetailDto> dtolist, Date sendDate) throws Exception {
- if (!ListUtils.isNullOrEmpty(dtolist)) {
- for (UserAttendanceDetailDto dto : dtolist) {
- AttendanceWarnMsgEntity msgEntity = new AttendanceWarnMsgEntity();
- String msgContent = "";
- //如果员工迟到
- if (dto.isBelate()) {
- msgEntity.setMsgType(Globals.msg_type_chidao);
- /*张红 迟到 <span class= 'redWord '>30</span>分钟*/
- msgContent ="迟到 <span class= 'redWord '>"+dto.getBelatemins()+"</span>分钟";
- }
- //如果员工早退
- if ( dto.isLeaveEarly()) {
- msgEntity.setMsgType(Globals.msg_type_zaotui);
- /*李丽 早退 <span class= 'redWord '>30</span>分钟*/
- msgContent ="早退 <span class= 'redWord '>"+dto.getLeaveEarlymins()+"</span>分钟";
- }
- //如果员工迟到+早退
- if (dto.isBelate() && dto.isLeaveEarly()) {
- msgEntity.setMsgType(Globals.msg_type_chidaozaotui);
- /*张红 迟到 <span class= 'redWord '>30</span>分钟*/
- msgContent ="迟到 <span class= 'redWord '>"+dto.getBelatemins()+"</span>分钟;"+"早退 <span class= 'redWord '>"+dto.getLeaveEarlymins()+"</span>分钟";
- }
-
- //如果员工旷工
- if (dto.getAbsenteeism().compareTo(BigDecimal.ZERO)>0) {
- /*张三 旷工*/
- msgEntity.setMsgType(Globals.msg_type_kuanggong);
- msgContent ="旷工";
- //+" <span class= 'redWord '>"+dto.getAbsenteeism()+"</span>天";
-
- }
- AttendanceDetailJsonObj jsonObj = dto.getJsonObj();
- //如果员工未打卡
- if (null!=jsonObj&&jsonObj.getNoPunchCard()!=0) {
- msgEntity.setMsgType(Globals.msg_type_weidaka);
- /*张三 未打卡*/
- msgContent ="未打卡";
- //+" <span class= 'redWord '>"+dto.getAbsenteeism()+"</span>天";
- }
- if (oConvertUtils.isNotEmpty(msgEntity.getMsgType())) {
- String userrealname = "";
- if (oConvertUtils.isNotEmpty(oConvertUtils.getString(dto.getUserid()))) {
- TSBaseUser user = get(TSBaseUser.class, dto.getUserid());
- if (null!=user) {
- userrealname = user.getRealName();
- }
- }
- String projectname = "";
- if (oConvertUtils.isNotEmpty(oConvertUtils.getString(dto.getPid()))) {
- TSDepart depart = get(TSDepart.class, dto.getPid());
- if (null!=depart) {
- projectname =depart.getDepartname();
- }
- }
- msgEntity.setMsgContent(userrealname+" "+msgContent);
- msgEntity.setUserId(dto.getUserid());
- msgEntity.setOrgId(pjde.getPid());
- msgEntity.setMsgTitle(projectname);
- msgEntity.setSendTime(sendDate);
- saveWarnMsg(0,msgEntity);
- }
- }
- }
- }
- /**
- * 保存预警消息
- * 先校验某人某天是否有某种类型下的预警消息, 如果没有 则入库 如果有, 则不再入库
- * @author hualong.zhao
- * @date 2017-12-20
- * @param i 表示位 , 0 时 为单个人的预警消息, 1 时 表示项目维度统计的预警消息
- * @param msgEntity
- * @throws Exception
- */
- private void saveWarnMsg(int i, AttendanceWarnMsgEntity msgEntity) throws Exception {
- CriteriaQuery cq = new CriteriaQuery(AttendanceWarnMsgEntity.class);
- if ( i==0) {
- cq.eq("userId", msgEntity.getUserId());
- cq.add();
- }
- if ( i==1) {
- cq.eq("orgId", msgEntity.getOrgId());
- cq.add();
- cq.isNull("userId");
- cq.add();
- }
- cq.eq("msgType", msgEntity.getMsgType());
- cq.add();
- cq.eq("sendTime", msgEntity.getSendTime());
- cq.add();
- List<AttendanceWarnMsgEntity> msglist = getListByCriteriaQuery( cq, false);
- ArrayList<String> userIdList=new ArrayList<String>();
- if (ListUtils.isNullOrEmpty(msglist)) {
- save(msgEntity);
- if ( i==0) {
- List<AttendanceWarnMsgDetailEntity> msgdetaillist = new ArrayList<>();
- //将msg 发送给项目经理
- String pid = msgEntity.getOrgId();
- String mngid = null;
- TSDepart depart = get(TSDepart.class, pid);
- if (null!=depart) {
- mngid = depart.getDeptProjManagerid();
- }
- if (oConvertUtils.isNotEmpty(mngid)) {
- AttendanceWarnMsgDetailEntity detailEntity = new AttendanceWarnMsgDetailEntity();
- detailEntity.setMsgId(msgEntity.getId());
- detailEntity.setReceivedId(mngid);
- detailEntity.setReadStatus(Globals.read_status_0);
- msgdetaillist.add(detailEntity);
- userIdList.add(mngid);
- }
- // 根据用户userIdList和消息具体类型批量推送
- batchSave(msgdetaillist);
- pushProcessor.pushCommon(userIdList, Globals.msg_type_3);
- }
-
- if (i==1) {
- userIdList=new ArrayList<String>();
- HashSet<String> useridHashSet = new HashSet<String>();
- List<AttendanceWarnMsgDto> msgDtolist = new ArrayList<AttendanceWarnMsgDto>();
- //将msg 发送给系统的人事部人员 和管理层人员
- List<AttendanceWarnMsgDto> attendanceWarnMsgDtolist = attendanceWarnMsgMinidao.getAllLeaderUserIdList();
- if (null==attendanceWarnMsgDtolist) {
- attendanceWarnMsgDtolist = new ArrayList<AttendanceWarnMsgDto>();
- }
- for (AttendanceWarnMsgDto dto: attendanceWarnMsgDtolist) {
- if (useridHashSet.contains(dto.getUserId())) {
- }else {
- msgDtolist.add(dto);
- useridHashSet.add(dto.getUserId());
- }
- }
- //将msg 发送给区域管理人员
- String orgid = msgEntity.getOrgId();
- // 查询当前员工的区域组织机构
- TSDepart tsDepart = getQyDepartByorgid(orgid);
- if (oConvertUtils.isEmpty(tsDepart)||oConvertUtils.isEmpty(tsDepart.getId())) {
- } else{
- //根据departid 查询该区域的区域总经理
- List<AttendanceWarnMsgDto> attendanceWarnMsgDtos= attendanceWarnMsgMinidao.getAllQYJLUserIdListByOrgid(tsDepart.getId());
- for (AttendanceWarnMsgDto dto: attendanceWarnMsgDtos) {
- if (useridHashSet.contains(dto.getUserId())) {
- }else {
- msgDtolist.add(dto);
- useridHashSet.add(dto.getUserId());
- }
- }
- }
- List<AttendanceWarnMsgDetailEntity> msgdetaillist = new ArrayList<>();
- if (!ListUtils.isNullOrEmpty(msgDtolist)) {
- for (AttendanceWarnMsgDto dto : msgDtolist) {
- AttendanceWarnMsgDetailEntity detailEntity = new AttendanceWarnMsgDetailEntity();
- detailEntity.setMsgId(msgEntity.getId());
- detailEntity.setReceivedId(dto.getUserId());
- detailEntity.setReadStatus(Globals.read_status_0);
- msgdetaillist.add(detailEntity);
- userIdList.add(dto.getUserId());
- }
- batchSave(msgdetaillist);
- // 根据用户userIdList和消息具体类型批量推送
- pushProcessor.pushCommon(userIdList, Globals.msg_type_3);
- }
- }
-
- }
- }
- private TSDepart getQyDepartByorgid(String orgid) {
- TSDepart tsDepart = get(TSDepart.class, orgid);
- if (tsDepart.getOrgType().equals(Globals.org_type_4)) {
- return tsDepart;
- } else {
- TSDepart parentdepart = tsDepart.getTSPDepart();
- if (oConvertUtils.isEmpty(parentdepart)||oConvertUtils.isEmpty(parentdepart.getId())) {
- return null;
- } else {
- return getQyDepartByorgid(tsDepart.getTSPDepart().getId());
- }
- }
- }
- }
|