package com.ld.igds.databoard.controller; import com.bstek.bdf2.core.business.IDept; import com.bstek.bdf2.core.business.IUser; import com.bstek.bdf2.core.context.ContextHolder; import com.bstek.bdf2.core.exception.NoneLoginException; import com.bstek.bdf2.core.model.DefaultDept; import com.bstek.bdf2.core.model.DefaultUser; import com.ld.igds.common.manager.CommonManager; import com.ld.igds.constant.BizType; import com.ld.igds.constant.Constant; import com.ld.igds.constant.RespCodeEnum; import com.ld.igds.data.BaseParam; import com.ld.igds.data.PageResponse; import com.ld.igds.databoard.data.DeptInfo; import com.ld.igds.databoard.manager.DataboardManager; import com.ld.igds.gas.dto.GasData; import com.ld.igds.gas.manager.GasManager; import com.ld.igds.grain.dto.GrainData; import com.ld.igds.grain.dto.GrainParam; import com.ld.igds.grain.manager.GrainManager; import com.ld.igds.inout.InoutConstant; import com.ld.igds.inout.dto.InoutData; import com.ld.igds.inout.dto.InoutSumDto; import com.ld.igds.inout.manager.InoutCommonManager; import com.ld.igds.models.*; import com.ld.igds.screen.data.ChartFood5303; import com.ld.igds.screen.data.DepotGrainData; import com.ld.igds.sys.service.SysUserService; import com.ld.igds.util.ContextUtil; import com.ld.igds.warn.data.WarnData; import com.ld.igds.websocket.WebSocketPacket; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.context.HttpRequestResponseHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author vince.xu * @ProjectName igds-dev * @Description: 大屏页面 * @date 2019/11/27 002710:42 */ @Controller @RequestMapping("basic/databoard") public class DataboardController { @Autowired private GrainManager grainManager; @Autowired private GasManager gasManager; @Autowired private CommonManager commonManager; @Autowired private InoutCommonManager inoutCommonManager; @Autowired private SysUserService sysUserService; @Autowired private DataboardManager databoardManager; /** * 综合大屏跳转不同页面 * * @return */ @RequestMapping("/index-gateway") public String indexGateway(@RequestParam(value = "u", required = false) String u, @RequestParam(value = "tag", required = false) String tag) { String companyId = ContextUtil.getDefaultCompanyId(); //上海嘉定定制大屏 if ("5303".equals(companyId)) { return "redirect:index-5303?u=" + u + "&tag=" + tag; } //通用大屏 return "redirect:index?u=" + u; } /** * 综合管理大屏 * * @param u * @return */ @RequestMapping("index") public ModelAndView index( @RequestParam(value = "u", required = false) String u) { // 模拟自动登录 if (StringUtils.isNotEmpty(u) && null == ContextUtil.getLoginUser()) { DefaultUser user = sysUserService.loadUser(u); if (null == user) { throw new NoneLoginException("NO Login User Info"); } registerLoginInfo(user); } IUser user = ContextUtil.getLoginUser(); ModelAndView view = new ModelAndView(); String deptId = ContextUtil.subDeptId(user); view.addObject("deptId", deptId); List listDepot = commonManager.listDepot(deptId); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, listDepot); view.addObject(Constant.MODEL_KEY_LOGIN_USER, user); // 粮情 GrainParam param = new GrainParam(); param.setCompanyId(user.getCompanyId()); param.setDeptId(deptId); Map mapGrain = grainManager.getCacheGrainDateMap(param); view.addObject(Constant.MODEL_KEY_GRAIN_MAP, mapGrain); // 气体 Map mapGas = gasManager.getCacheGasMap(user.getCompanyId(), deptId); if (mapGas == null) { mapGas = new HashMap<>(); } view.addObject(Constant.MODEL_KEY_GAS_MAP, mapGas); view.addObject("bizType", BizType.SCREEN.getCode()); view.addObject("bizTag", WebSocketPacket.BIZ_TAG_COMMON); //获取库区基本信息 DeptInfo deptInfo = databoardManager.getDeptInfo(deptId); view.addObject("deptInfo", deptInfo); // 标语 DicSlogan dicSlogan = commonManager.getDicSlogan(); view.addObject("dicSlogan", dicSlogan); // 大屏名称 DicSysConf sysConf = commonManager.getSysConf(user.getCompanyId()); String largeScreenName = sysConf.getScreeName(); if (largeScreenName.indexOf(Constant.TAG_SUB_NAME) != -1) { DefaultDept defaultDept = commonManager.getSubDept(user, deptId); largeScreenName = largeScreenName.replace(Constant.TAG_SUB_NAME, defaultDept == null ? "" : defaultDept.getName()); } view.addObject("largeScreenName", largeScreenName + "综合大屏"); WeatherInfo weatherInfo = commonManager.getWeather(); view.addObject("weatherInfo", weatherInfo); view.setViewName("databoard/databoard"); return view; } /** * 根据查询最新粮情数据 * * @param param * @return */ @RequestMapping("/query-grain-data-map") @ResponseBody public PageResponse> queryGrainData( @RequestBody GrainParam param) { return grainManager.queryCheckDateMap(param); } /** * 上海嘉定定制大屏 * * @param u * @return */ @RequestMapping("index-5303") public ModelAndView index5303(@RequestParam(value = "u", required = false) String u, @RequestParam(value = "tag", required = false) String tag) { // 模拟自动登录 if (StringUtils.isNotEmpty(u) && null == ContextUtil.getLoginUser()) { DefaultUser user = sysUserService.loadUser(u); if (null == user) { throw new NoneLoginException("NO Login User Info"); } registerLoginInfo(user); } ModelAndView view = new ModelAndView(); IUser user = ContextUtil.getLoginUser(); view.addObject(Constant.MODEL_KEY_LOGIN_USER, user); //库区编码 String deptId = ContextUtil.subDeptId(user); view.addObject("deptId", deptId); view.addObject("bizType", BizType.SCREEN.getCode()); view.addObject("bizTag", WebSocketPacket.BIZ_TAG_COMMON); // 大屏名称 DicSysConf sysConf = commonManager.getSysConf(user.getCompanyId()); String largeScreenName = sysConf.getScreeName(); if (largeScreenName.indexOf(Constant.TAG_SUB_NAME) != -1) { DefaultDept defaultDept = commonManager.getSubDept(user, deptId); largeScreenName = largeScreenName.replace(Constant.TAG_SUB_NAME, defaultDept == null ? "" : defaultDept.getName()); } view.addObject("largeScreenName", largeScreenName + "综合大屏"); //天气 WeatherInfo weatherInfo = commonManager.getWeather(); view.addObject("weatherInfo", weatherInfo); //仓库列表及粮情信息 List depotGrainList = databoardManager.listDepotAndGrain(user.getCompanyId(), deptId); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, depotGrainList); ChartFood5303 chartFood5303 = databoardManager.getFoodNumber(user.getCompanyId(), deptId); view.addObject("chartFood", chartFood5303); //是否隐藏仓储信息,1-不隐藏;2-隐藏 if (StringUtils.isEmpty(tag)) { tag = "1"; } view.addObject("tag", tag); view.setViewName("databoard/databoard-5303"); return view; } /** * 出入库大屏 * * @param u * @return */ @RequestMapping("inout") public ModelAndView inout( @RequestParam(value = "u", required = false) String u) { // 模拟自动登录 if (StringUtils.isNotEmpty(u) && null == ContextUtil.getLoginUser()) { DefaultUser user = new DefaultUser(); user.setCompanyId(ContextUtil.getDefaultCompanyId()); user.setUsername(u); user.setCname("出入库大屏"); registerLoginInfo(user); } ModelAndView view = new ModelAndView(); List listDepot = commonManager.listDepot(null); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, listDepot); view.addObject(Constant.MODEL_KEY_LOGIN_USER, ContextUtil.getLoginUser()); view.addObject("bizType", BizType.SCREEN.getCode()); view.addObject("bizTag", WebSocketPacket.BIZ_TAG_SCREEN_INOUT); // 标语 DicSlogan dicSlogan = commonManager.getDicSlogan(); view.addObject("dicSlogan", dicSlogan); IUser user = ContextUtil.getLoginUser(); String deptId = ContextUtil.subDeptId(user); view.addObject("deptId", deptId); // 大屏名称 DicSysConf sysConf = commonManager.getSysConf(user.getCompanyId()); String largeScreenName = sysConf.getScreeName(); if (largeScreenName.indexOf(Constant.TAG_SUB_NAME) != -1) { DefaultDept defaultDept = commonManager.getSubDept(user, deptId); largeScreenName = largeScreenName.replace(Constant.TAG_SUB_NAME, defaultDept == null ? "" : defaultDept.getName()); } view.addObject("largeScreenName", largeScreenName + "出入库大屏"); WeatherInfo weatherInfo = commonManager.getWeather(); view.addObject("weatherInfo", weatherInfo); view.setViewName("databoard/databoard-inout"); return view; } /** * 出入库大屏初始化通知后端 * * @param param * @return */ @RequestMapping("/init-inout-data") @ResponseBody public PageResponse initInoutData(@RequestBody BaseParam param) { inoutCommonManager.initInoutScreen(param.getDeptId()); return new PageResponse(RespCodeEnum.CODE_0000.getCode(), "成功!"); } /** * 化验室大屏 * * @param u * @param sort * @return */ @RequestMapping("check") public ModelAndView check( @RequestParam(value = "u", required = false) String u, @RequestParam(value = "sort", required = false) String sort) { // 当前登录人信息 IUser user = ContextUtil.getLoginUser(); // 模拟自动登录 if (StringUtils.isNotEmpty(u) && null == ContextUtil.getLoginUser()) { DefaultUser user2 = new DefaultUser(); user2.setCompanyId(ContextUtil.getDefaultCompanyId()); user2.setUsername(u); user2.setCname("化验大屏"); registerLoginInfo(user2); } if (null == user) { user = ContextUtil.getLoginUser(); } String deptId = ContextUtil.subDeptId(user); ModelAndView view = new ModelAndView(); List listDepot = commonManager.listDepot(true, deptId); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, listDepot); // 登录人 view.addObject(Constant.MODEL_KEY_LOGIN_USER, user); view.addObject(Constant.MODEL_KEY_DEPT_ID, deptId); view.addObject("bizType", BizType.SCREEN.getCode()); view.addObject("bizTag", WebSocketPacket.BIZ_TAG_SCREEN_CHECK); // 标语 DicSlogan dicSlogan = commonManager.getDicSlogan(); view.addObject("dicSlogan", dicSlogan); // 大屏名称 DefaultDept defaultDept = commonManager.getSubDept(user, deptId); if (null == defaultDept) { view.addObject("largeScreenName", "智慧粮库化验室引导"); } else { view.addObject("largeScreenName", defaultDept.getName() + "化验室引导"); } // 获取当前页面配置的摄像头信息 List listInoutConf = inoutCommonManager.getListInoutConf( user.getCompanyId(), deptId); InoutConf conf = inoutCommonManager.getInoutConf(listInoutConf, sort, InoutConstant.CONF_TYPE_60, InoutConstant.PROGRESS_CHECK, 1); view.addObject("camera", conf); WeatherInfo weatherInfo = commonManager.getWeather(); view.addObject("weatherInfo", weatherInfo); view.setViewName("databoard/databoard-check"); return view; } /** * 化验大屏初始化通知后端 * * @param param * @return */ @RequestMapping("/init-check-data") @ResponseBody public PageResponse initCheckData(@RequestBody BaseParam param) { inoutCommonManager.initInoutScreen(param.getCompanyId()); return new PageResponse(RespCodeEnum.CODE_0000.getCode(), "成功!"); } protected void registerLoginInfo(IUser user) { HttpRequestResponseHolder holder = new HttpRequestResponseHolder( ContextHolder.getRequest(), ContextHolder.getResponse()); holder.getRequest().getSession() .setAttribute(ContextHolder.LOGIN_USER_SESSION_KEY, user); UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken( user, user.getPassword(), user.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(auth); } /** * 集团或者公司大屏 * * @param u 默认用户Id * @param deptId 默认用户所在部门 * @return */ @RequestMapping("group") public ModelAndView group( @RequestParam(value = "u", required = false) String u, @RequestParam(value = "d", required = false) String deptId) { // 当前登录人信息 IUser user = ContextUtil.getLoginUser(); // 模拟自动登录 if (StringUtils.isNotEmpty(u) && null == user) { DefaultUser user2 = new DefaultUser(); user2.setCompanyId(ContextUtil.getDefaultCompanyId()); user2.setUsername(u); user2.setCname("出入库大屏"); registerLoginInfo(user2); } if (null == user) { user = ContextUtil.getLoginUser(); } ModelAndView view = new ModelAndView(); List depts = user.getDepts(); IDept iDept = depts.get(0); // 大屏名称 if (null == iDept) { view.addObject("largeScreenName", "智慧粮库综合管理数字大屏"); } else { view.addObject("largeScreenName", iDept.getName() + "数字大屏"); } view.addObject(Constant.MODEL_KEY_LOGIN_USER, user); view.addObject(Constant.MODEL_KEY_DEPT_ID, iDept.getId()); // 仓库列表 List listDepot = commonManager.listDepotByDeptId(user.getCompanyId(), iDept.getId()); view.addObject(Constant.MODEL_KEY_DEPOT_LIST, listDepot); // 库区列表 List deptList = commonManager.getDeptListByDeptId(iDept .getId()); view.addObject("deptList", deptList); // 警告列表 List warnList = commonManager.listWarnByDeptId(iDept.getId()); view.addObject("warnList", warnList); view.addObject(Constant.MODEL_KEY_DEPT_ID, deptId); view.addObject("bizType", BizType.SCREEN.getCode()); view.addObject("bizTag", WebSocketPacket.BIZ_TAG_SCREEN_GROUP); // 统计出入库信息 Map inoutMap = this.listInoutByDeptId(deptList); view.addObject("inoutMap", inoutMap); // 气象信息 WeatherInfo weatherInfo = commonManager.getWeather(); view.addObject("weatherInfo", weatherInfo); view.setViewName("databoard/databoard-group"); return view; } /** * 获取分库的出入库信息,集团大屏用 * * @param deptList * @return */ public Map listInoutByDeptId(List deptList) { Map map = new HashMap<>(); List list1 = null; List list2 = null; InoutSumDto inoutDto; for (DefaultDept dept : deptList) { inoutDto = new InoutSumDto(); list1 = inoutCommonManager.getListInoutCache(dept.getId()); list2 = inoutCommonManager.getCompleteListInoutCache(dept.getId()); if (null != list1 && list1.size() > 0) { for (InoutData inoutData : list1) { if (InoutConstant.TYPE_IN.equals(inoutData.getType())) { inoutDto.setInSumNum(inoutDto.getInSumNum() + 1); } if (InoutConstant.TYPE_OUT.equals(inoutData.getType())) { inoutDto.setOutSumNum(inoutDto.getOutSumNum() + 1); } } } if (null != list2 && list2.size() > 0) { for (InoutData inoutData : list2) { if (InoutConstant.TYPE_IN.equals(inoutData.getType())) { inoutDto.setInSumNum(inoutDto.getInSumNum() + 1); inoutDto.setInComplateNum(inoutDto.getInComplateNum() + 1); } if (InoutConstant.TYPE_OUT.equals(inoutData.getType())) { inoutDto.setOutSumNum(inoutDto.getOutSumNum() + 1); inoutDto.setOutComplateNum(inoutDto.getOutComplateNum() + 1); } } } map.put(dept.getId(), inoutDto); } return map; } }