package com.thhy.mobile.modules.biz.login.service.impl; import com.thhy.general.common.BasicMessage; import com.thhy.general.common.BasicStatus; import com.thhy.general.common.entity.SysUserDto; import com.thhy.general.config.BasicContext; import com.thhy.general.config.GlobalConfig; import com.thhy.general.config.SysUserInfo; import com.thhy.general.exception.BasicException; import com.thhy.general.utils.DeepCopyUtils; import com.thhy.general.utils.UUIDUtils; import com.thhy.general.utils.UserInfoUtils; import com.thhy.general.utils.password.PasswdUtils; import com.thhy.mobile.modules.biz.login.entity.*; import com.thhy.mobile.modules.biz.login.mapper.SysUserMapper; import com.thhy.mobile.modules.biz.login.service.LoginService; import com.thhy.mobile.modules.biz.menu.entity.Menu; import com.thhy.mobile.modules.biz.menu.mapper.MenuMapper; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.C; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; @Service public class LoginServiceImpl implements LoginService { @Autowired private SysUserMapper sysUsersMapper; @Autowired private RedissonClient redissonClient; @Autowired private GlobalConfig globalConfig; @Autowired private MenuMapper menuMapper; @Override public LoginVo login(SysUserDto sysUserDto) { //根据用户名获取用户信息 SysUsers sysUser = sysUsersMapper.queryByUsername(sysUserDto.getUsername()); if(sysUser==null){ throw new BasicException(BasicStatus.LOGIN_FAILD); //用户名不存在导致登录失败 } //解析并校验密码 boolean result = PasswdUtils.validatePassword(sysUserDto.getPassword(),sysUser.getPassword()); if(!result){ throw new BasicException(BasicStatus.USER_NOT_EXIST); } if(sysUser.getSubAdmin()==1){ HashMap map = sysUsersMapper.queryCompanyByComAdmin(sysUser.getUserId()); sysUser.setCompanyId(map.get("companyId").toString()); sysUser.setCompanyName(map.get("companyName").toString()); } if(sysUser.getIsPlat()==1){ HashMap map = sysUsersMapper.queryCompanyByUser(sysUser.getUserId()); sysUser.setCompanyId(map.get("companyId").toString()); sysUser.setCompanyName(map.get("companyName").toString()); } SysUserInfo sysUserInfo = new SysUserInfo(); DeepCopyUtils.copy(sysUser,sysUserInfo); //这里不需要密码 String token = UUIDUtils.create()+sysUserInfo.getUserId(); redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ token).trySet(sysUserInfo,1000, TimeUnit.MINUTES); //用户菜单权限 List menuList = menuMapper.findMenuListByUser(sysUserInfo.getUserId()); if(menuList.size()<1){ throw new BasicException(BasicStatus.NO_ENABLE_MENU); } BasicContext.setToken(token); return new LoginVo(token,menuList,sysUserInfo); } @Override public List> proLines() { return sysUsersMapper.queryAllProLine(); } @Override public Map choseLine(ProLineDto proLineDto, HttpServletRequest request) { SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); String token = request.getHeader("usertoken"); String proLineName = sysUsersMapper.queryProLineNameById(proLineDto.getProLineId()); userInfo.setProLineId(proLineDto.getProLineId()); userInfo.setProLineName(proLineName); long min = tokentime(); redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ token).trySet(userInfo,min, TimeUnit.MINUTES); int count = sysUsersMapper.countTodayLinePlanByLineId(proLineDto.getProLineId()); Map map = new HashMap<>(); if(count>0){ map.put("dateset",false); }else { map.put("dateset",true); } return map; } @Transactional @Override public void commitLinePlan(ProLineDto proLineDto) { List ringNums = proLineDto.getRingNums(); String ringNumExits = sysUsersMapper.checkPipeExitsByRingNums(ringNums); if(!StringUtils.isEmpty(ringNumExits)){ throw new BasicException(new BasicMessage("00900",ringNumExits+"环号已存在")); } String ringNumPlanExits = sysUsersMapper.checkPlanExitsByRingNums(ringNums); if(!StringUtils.isEmpty(ringNumPlanExits)){ throw new BasicException(new BasicMessage("00901",ringNumPlanExits+"环号其他产线已存在")); } ProLinePlan proLinePlan = new ProLinePlan(); proLinePlan.setProLineId(proLineDto.getProLineId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date start = sdf.parse(proLineDto.getDateStr()+" 07:00:00"); Calendar calendar = Calendar.getInstance(); calendar.setTime(start); calendar.add(Calendar.DAY_OF_MONTH,1); Date end = calendar.getTime(); proLinePlan.setSetDayStart(start); proLinePlan.setSetDayEnd(end); } catch (ParseException e) { throw new RuntimeException(e); } for(String ringNum : ringNums){ proLinePlan.setRingNum(ringNum); sysUsersMapper.insertProLinePlan(proLinePlan); } } public long tokentime(){ Date currentTime = new Date(); SimpleDateFormat sdfStand = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdfSeven = new SimpleDateFormat("yyyy-MM-dd 07:00:00"); String todaySevenStr = sdfSeven.format(currentTime); Date todaySeven = null; try { todaySeven = sdfStand.parse(todaySevenStr); } catch (ParseException e) { throw new RuntimeException(e); } if(currentTime.getTime()>todaySeven.getTime()){ //当前时间大于 当天7点 Calendar calendar = Calendar.getInstance(); calendar.setTime(todaySeven); calendar.add(Calendar.DAY_OF_MONTH,1); Date tommSeven = calendar.getTime(); long diff = (tommSeven.getTime()-currentTime.getTime())/1000/60; return diff; }else{ long diff = (todaySeven.getTime()-currentTime.getTime())/1000/60; return diff; } } public static void main(String[] args) throws Exception{ } }