czt
5 小时以前 b291d46184e69b11cd9fa045e6d06be084d4203b
大屏标语配置,及大屏推送
已添加7个文件
已修改9个文件
888 ■■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Slogan.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/SloganMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SloganService.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketServer.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConf.view.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/com/fzzy/igds/Slogan.view.xml 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/com/fzzy/igds/SloganPR.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/models/core.model.xml 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/common/igds-common.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/group/gis.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/group/index.js 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/group/video.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/group/index.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Slogan.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.fzzy.igds.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.bstek.dorado.annotation.PropertyDef;
import com.fzzy.igds.constant.Constant;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
 * @Description å¤§å±æ ‡è¯­
 * @Author CZT
 * @Date 2025/12/18 11:41
 */
@Data
@Entity
@Table(name = "d_slogan")
@TableName("d_slogan")
public class Slogan extends BizBaseEntity implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "id", length = 50)
    @PropertyDef(label = "id")
    private String id;
    @Column(name = "name", columnDefinition = "varchar(50) COMMENT '名称'")
    @TableField("name")
    private String name;
    @Column(name = "content", columnDefinition = "varchar(200) COMMENT '标语内容'")
    @TableField("content")
    private String content;
    @Column(name = "status", columnDefinition = "varchar(50) COMMENT '状态(N-不使用;Y-使用)'")
    @TableField("status")
    private String status = Constant.YN_N;
    @Column(name = "color", columnDefinition = "varchar(50) COMMENT '颜色'")
    @TableField("color")
    private String color ;
    @Column(name = "push_user", columnDefinition = "varchar(50) COMMENT '推送人'")
    @TableField("push_user")
    private String pushUser ;
    @Column(name = "push_time", columnDefinition = "dateTime COMMENT '发布时间'")
    @TableField("push_time")
    private Date pushTime ;
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/SloganMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.fzzy.igds.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzzy.igds.domain.Slogan;
import org.apache.ibatis.annotations.Mapper;
/**
 * @Description
 * @Author CZT
 * @Date 2025/12/18 19:19
 */
@Mapper
public interface SloganMapper extends BaseMapper<Slogan> {
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SloganService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.fzzy.igds.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.domain.Slogan;
import com.fzzy.igds.mapper.SloganMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * @Description service层
 * @Author CZT
 * @Date 2025/12/18 19:19
 */
@Service
public class SloganService {
    @Resource
    private SloganMapper sloganMapper;
    /**
     *
     * @return
     */
    public List<Slogan> listData(String status) {
        QueryWrapper<Slogan> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("company_id", ContextUtil.getCompanyId());
        if(StringUtils.isNotBlank(status)){
            queryWrapper.eq("status", status);
        }
        return sloganMapper.selectList(queryWrapper);
    }
    /**
     * æ›´æ–°æˆ–保存信息
     * @param data
     * @return
     */
    public void saveData(Slogan data) {
        if(StringUtils.isBlank(data.getCompanyId())){
            data.setCompanyId(ContextUtil.getCompanyId());
        }
        if(StringUtils.isBlank(data.getStatus())){
            data.setStatus(Constant.YN_N);
        }
        data.setUpdateBy(ContextUtil.getLoginUserName());
        data.setUpdateTime(new Date());
        if(StringUtils.isBlank(data.getId())){
            data.setId(ContextUtil.generateId());
            data.setCreateBy(ContextUtil.getLoginUserName());
            data.setCreateTime(new Date());
            sloganMapper.insert( data);
        }else {
            sloganMapper.updateById( data);
        }
    }
    /**
     * åˆ é™¤ä¿¡æ¯
     * @param data
     * @return
     */
    public void delData(Slogan data) {
        sloganMapper.deleteById(data);
    }
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.fzzy.igds.websocket;
import com.fzzy.igds.constant.OrderRespEnum;
import lombok.Data;
import java.io.Serializable;
/**
 * @Description ç”¨äºŽWEbSocket前后端数据传输对象封装
 * @Author CZT
 * @Date 2025/12/18 19:19
 */
@Data
public class WebSocketPacket implements Serializable {
    public static final String BIZ_TAG_COMMON = "common";
    public static final String BIZ_TAG_SCREEN_CHECK = "check";
    public static final String BIZ_TAG_SCREEN_INOUT = "inout";
    public static final String BIZ_TAG_SCREEN_GROUP = "group";
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    // ç»„织编码,不可为空
    private String companyId;
    private String deptId;
    // ä¸šåŠ¡ç±»åž‹ï¼Œä¸å¯ä¸ºç©º
    private String bizType;
    //业务自定义标签
    private String bizTag = "common";//默认代表通用
    // ä¸šåŠ¡ID,比如仓库ID,类型Id等
    private String bizId;
    //用于命令类型的返回代码
    private String orderResp = OrderRespEnum.MSG_SUCCESS.getCode();
    private String userId;
    // ä¸šåŠ¡æ•°æ®ï¼Œå¯ä»¥æ˜¯å­—ç¬¦ä¸²æˆ–è€…ä¸šåŠ¡æ•°æ®
    private Object data;
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketServer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
package com.fzzy.igds.websocket;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * @Description WEB-Socket服务,大屏使用:请求路径定义:"/websocket/{组织编码}"
 * @Author CZT
 * @Date 2025/12/18 19:19
 */
@Slf4j
@Component
@ServerEndpoint(value = "/websocket/{deptId}/{bizType}/{bizTag}/{userId}")
public class WebSocketServer {
    private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();
    private static Map<String, String> sessionIds = new ConcurrentHashMap<>();
    /**
     * é…ç½®æ¨¡å—在线状态
     */
    public static Map<String,Boolean> contextOnLineMap = new HashMap<String, Boolean>();
    // ä¸ŽæŸä¸ªå®¢æˆ·ç«¯çš„连接会话,需要通过它来给客户端发送数据
    private Session session;
    @OnOpen
    public void onOpen(Session session,
                       @PathParam("deptId") String deptId,
                       @PathParam("bizType") String bizType,
                       @PathParam("bizTag") String bizTag,
                       @PathParam("userId") String userId) throws Exception {
        this.session = session;
        String key = deptId + "-" + bizType + "-" + bizTag + "-" + userId;
        sessionPool.put(key, session);
        sessionIds.put(session.getId(), key);
        log.info("new webSocket,key={}", key);
    }
    @OnClose
    public void onClose() {
        String key = sessionIds.get(session.getId());
        sessionPool.remove(key);
        sessionIds.remove(session.getId());
        log.info("WebSocket连接关闭={}", key);
        String bizType = key.split("-")[2];
        contextOnLineMap.put(bizType, false);
    }
    /**
     * æ”¶åˆ°å‰ç«¯å‘送的信息
     *
     * @param message
     * @param session
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        contextOnLineMap.put(message,true);
        log.info("来自客户端信息:\n" + message);
    }
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("发生错误");
        String key = sessionIds.get(session.getId());
        sessionPool.remove(key);
        sessionIds.remove(session.getId());
        error.printStackTrace();
    }
    /**
     * åŽç«¯å‘前端推送信息,接受者为同一个业务类型操作所有人员
     *
     * @param packet
     */
    public static void sendByPocket(WebSocketPacket packet) {
        if (StringUtils.isEmpty(packet.getBizType())) {
            log.error("WebSocket信息推送失败,业务类型不可为空。");
            return;
        }
        String tag = packet.getDeptId() + "-" + packet.getBizType() + "-" + packet.getBizTag();
        // éåŽ†æŽ¨é€ï¼Œåªè¦æ˜¯bizType一致的均推送
        Session session;
        for (String key : sessionPool.keySet()) {
            if (key.indexOf(tag) != -1) {
                session = sessionPool.get(key);
                session.getAsyncRemote().sendText(
                        JSONObject.toJSONString(packet));
            }
        }
    }
    /**
     * å‘送给指定人员
     *
     * @param packet
     */
    public static void sendByUser(WebSocketPacket packet) {
        if (StringUtils.isEmpty(packet.getBizType())
                || StringUtils.isEmpty(packet.getDeptId())
                || StringUtils.isEmpty(packet.getUserId())) {
            log.error("WebSocket信息推送失败,组织编码和业务类型或者指定人信息参数没有获取到!");
            return;
        }
        String tag = packet.getDeptId() + "-" + packet.getBizType() + "-"
                + packet.getBizTag() + "-" + packet.getUserId();
        Session session;
        for (String key : sessionPool.keySet()) {
            if (tag.equals(key)) {
                session = sessionPool.get(key);
                session.getAsyncRemote().sendText(
                        JSONObject.toJSONString(packet));
            }
        }
    }
    /**
     * æ ¹æ®æŒ‡å®šçš„BizId标签推送
     *
     * @param packet
     */
    public static void sendByBizTag(WebSocketPacket packet) {
        if (StringUtils.isEmpty(packet.getBizType())
                || StringUtils.isEmpty(packet.getDeptId())
                || StringUtils.isEmpty(packet.getBizTag())) {
            log.error("WebSocket信息推送失败,组织编码和业务类型或者指定人信息参数没有获取到!");
            return;
        }
        String tag = packet.getDeptId() + "-" + packet.getBizType() + "-" + packet.getBizTag();
        // éåŽ†æŽ¨é€ï¼Œåªè¦æ˜¯bizType一致的均推送
        Session session;
        for (String key : sessionPool.keySet()) {
            if (key.indexOf(tag) != -1) {
                session = sessionPool.get(key);
                session.getAsyncRemote().sendText(
                        JSONObject.toJSONString(packet));
            }
        }
    }
}
fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConf.view.xml
@@ -391,16 +391,18 @@
                        $notify(&quot;数据执行完成!!&quot;);&#xD;
                        self.get(&quot;parent&quot;).hide();&#xD;
                        });</ClientEvent>
          <Property name="caption">确定</Property>
          <Property name="iconClass">fa fa-check</Property>
          <Property name="caption">保存</Property>
          <Property name="iconClass">fa fa-check-circle</Property>
          <Property name="exClassName">btn1</Property>
          <Property name="width">120</Property>
        </Button>
        <Button>
          <ClientEvent name="onClick">view.get(&quot;#dsMain.data:#&quot;).cancel();&#xD;
                        self.get(&quot;parent&quot;).hide();</ClientEvent>
          <Property name="caption">取消</Property>
          <Property name="iconClass">fa fa-times</Property>
          <Property name="exClassName">btn3</Property>
          <Property name="iconClass">fa fa-times-circle</Property>
          <Property name="width">120</Property>
        </Button>
      </Buttons>
      <Children>
fzzy-igdss-view/src/main/java/com/fzzy/igds/Slogan.view.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8"?>
<ViewConfig>
  <Arguments/>
  <Context/>
  <Model/>
  <View layout="padding:10">
    <ClientEvent name="onReady">&#xD;
          /**&#xD;
          * æŸ¥è¯¢&#xD;
          */&#xD;
          query = function(){&#xD;
          view.get(&quot;#dsMain&quot;).flushAsync();&#xD;
          }&#xD;</ClientEvent>
    <Property name="packages">font-awesome,css-common</Property>
    <DataSet id="dsMain">
      <Property name="dataProvider">sloganPR#loadData</Property>
      <Property name="dataType">[dtSlogan]</Property>
    </DataSet>
    <Container>
      <Property name="className">c-param</Property>
      <ToolBar>
        <ToolBarButton>
          <ClientEvent name="onClick">view.get(&quot;#dsMain&quot;).insert();&#xD;
              view.get(&quot;#dialog1&quot;).show();&#xD;
          </ClientEvent>
          <Property name="caption">新增</Property>
          <Property name="exClassName">btn1</Property>
          <Property name="width">100</Property>
          <Property name="iconClass">fa fa-plus</Property>
        </ToolBarButton>
        <ToolBarButton>
          <ClientEvent name="onClick">var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
              if(select){&#xD;
              view.get(&quot;#dialog1&quot;).show();&#xD;
              }else{&#xD;
              $notify(&quot;请选择需要修改的数据……&quot;);&#xD;
              }</ClientEvent>
          <Property name="caption">修改</Property>
          <Property name="exClassName">btn2</Property>
          <Property name="width">100</Property>
          <Property name="iconClass">fa fa-pencil-square-o</Property>
        </ToolBarButton>
        <ToolBarButton>
          <ClientEvent name="onClick">&#xD;
              var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
              if(select){&#xD;
              view.get(&quot;#ajaxDel&quot;).set(&quot;parameter&quot;,select).execute(function(result){&#xD;
              select.remove();&#xD;
              });&#xD;
              }else{&#xD;
              $notify(&quot;请选择需要删除的仓库……&quot;);&#xD;
              }&#xD;
              &#xD;
          </ClientEvent>
          <Property name="caption">删除</Property>
          <Property name="exClassName">btn3</Property>
          <Property name="width">100</Property>
          <Property name="iconClass">fa fa-times</Property>
        </ToolBarButton>
        <ToolBarButton>
          <ClientEvent name="onClick">var data = view.get(&quot;#dsMain.data:#&quot;);&#xD;
              if(data){&#xD;
              $confirm(&quot;确认将&quot; + data.get(&quot;name&quot;) + &quot;推送至大屏?&quot;,function(){&#xD;
              view.get(&quot;#ajaxAction1&quot;).set(&quot;parameter&quot;,data).execute(function(){&#xD;
              $notify(&quot;推送成功!&quot;);&#xD;
              view.get(&quot;#dsMain&quot;).flushAsync ();&#xD;
              });&#xD;
              });&#xD;
              }else{&#xD;
              $notify(&quot;请选择一条标语&quot;);&#xD;
              }&#xD;
              &#xD;
          </ClientEvent>
          <Property name="caption">推送大屏</Property>
          <Property name="exClassName">btn4</Property>
          <Property name="width">120</Property>
          <Property name="iconClass">fa fa-upload</Property>
        </ToolBarButton>
      </ToolBar>
      <DataGrid id="dataGridMain" layoutConstraint="padding:8">
        <ClientEvent name="onDataRowClick">view.get(&quot;#dataGridMain&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
        <Property name="dataSet">dsMain</Property>
        <Property name="readOnly">true</Property>
        <Property name="selectionMode">singleRow</Property>
        <Property name="readOnly">true</Property>
        <RowSelectorColumn/>
        <RowNumColumn/>
        <DataColumn name="name">
          <Property name="property">name</Property>
          <Property name="align">center</Property>
          <Property name="width">120</Property>
        </DataColumn>
        <DataColumn name="content">
          <Property name="property">content</Property>
          <Property name="align">center</Property>
        </DataColumn>
        <DataColumn name="color">
          <Property name="property">color</Property>
          <Property name="align">center</Property>
          <Property name="width">100</Property>
        </DataColumn>
        <DataColumn name="status">
          <Property name="property">status</Property>
          <Property name="align">center</Property>
          <Property name="width">100</Property>
        </DataColumn>
        <DataColumn name="pushUser">
          <Property name="property">pushUser</Property>
          <Property name="align">center</Property>
          <Property name="width">120</Property>
        </DataColumn>
        <DataColumn name="pushTime">
          <Property name="property">pushTime</Property>
          <Property name="align">center</Property>
          <Property name="width">160</Property>
        </DataColumn>
        <DataColumn name="updateTime">
          <Property name="property">updateTime</Property>
          <Property name="align">center</Property>
          <Property name="width">160</Property>
        </DataColumn>
      </DataGrid>
    </Container>
    <Dialog id="dialog1" layout="regionPadding:8">
      <Property name="iconClass">fa fa-tasks</Property>
      <Property name="width">500</Property>
      <Property name="height">300</Property>
      <Property name="caption">标语详细</Property>
      <Buttons>
        <Button>
          <ClientEvent name="onClick">view.get(&quot;#uaMain&quot;).execute(function(result){&#xD;
    if(result){&#xD;
        $alert(result);&#xD;
    }else{&#xD;
        $notify(&quot;保存成功!!&quot;);&#xD;
        view.get(&quot;#dialog1&quot;).hide();&#xD;
        query();&#xD;
    }&#xD;
});&#xD;
&#xD;
</ClientEvent>
          <Property name="caption">保存</Property>
          <Property name="iconClass">fa fa-check-circle</Property>
          <Property name="exClassName">btn1</Property>
          <Property name="width">120</Property>
        </Button>
        <Button>
          <ClientEvent name="onClick">view.get(&quot;#dsMain.data:#&quot;).cancel();&#xD;
view.get(&quot;#dialog1&quot;).hide();&#xD;
</ClientEvent>
          <Property name="caption">取消</Property>
          <Property name="exClassName">btn3</Property>
          <Property name="iconClass">fa fa-times-circle</Property>
          <Property name="width">120</Property>
        </Button>
      </Buttons>
      <Children>
        <AutoForm>
          <Property name="dataSet">dsMain</Property>
          <Property name="cols">*</Property>
          <Property name="labelAlign">right</Property>
          <Property name="labelSeparator"> : </Property>
          <Property name="labelWidth">120</Property>
          <AutoFormElement>
            <Property name="name">name</Property>
            <Property name="property">name</Property>
            <Editor/>
          </AutoFormElement>
          <AutoFormElement>
            <Property name="property">color</Property>
            <Property name="name">color</Property>
            <Editor/>
          </AutoFormElement>
          <AutoFormElement layoutConstraint="rowSpan:3">
            <Property name="name">content</Property>
            <Property name="property">content</Property>
            <Property name="editorType">TextArea</Property>
            <Editor/>
          </AutoFormElement>
        </AutoForm>
      </Children>
      <Tools/>
    </Dialog>
    <UpdateAction id="uaMain">
      <Property name="dataResolver">sloganPR#saveAll</Property>
      <UpdateItem>
        <Property name="dataSet">dsMain</Property>
      </UpdateItem>
    </UpdateAction>
    <AjaxAction id="ajaxAction1">
      <Property name="service">sloganPR#push</Property>
    </AjaxAction>
    <AjaxAction id="ajaxDel">
      <Property name="service">sloganPR#delData</Property>
      <Property name="confirmMessage">确定要执行删除么?</Property>
    </AjaxAction>
  </View>
</ViewConfig>
fzzy-igdss-view/src/main/java/com/fzzy/igds/SloganPR.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
package com.fzzy.igds;
import com.bstek.dorado.annotation.DataProvider;
import com.bstek.dorado.annotation.DataResolver;
import com.bstek.dorado.annotation.Expose;
import com.bstek.dorado.data.entity.EntityState;
import com.bstek.dorado.data.entity.EntityUtils;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.OrderRespEnum;
import com.fzzy.igds.domain.Slogan;
import com.fzzy.igds.service.SloganService;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.igds.websocket.WebSocketPacket;
import com.fzzy.igds.websocket.WebSocketServer;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * @Description å¤§å±æ ‡è¯­ç®¡ç†
 * @Author CZT
 * @Date 2025/12/18 19:19
 */
@Component
public class SloganPR {
    @Resource
    private SloganService sloganService;
    /**
     * æŸ¥è¯¢
     *
     * sloganPR#loadData
     *
     * @param
     * @return
     */
    @DataProvider
    public List<Slogan> loadData() {
        return sloganService.listData(null);
    }
    /**
     * ä¿å­˜ sloganPR#saveAll
     *
     * @return
     */
    @DataResolver
    @Transactional
    public String saveAll(List<Slogan> items) {
        EntityState state;
        Slogan slogan;
        for (Slogan item : items) {
            slogan = new Slogan();
            BeanUtils.copyProperties(item, slogan);
            state = EntityUtils.getState(item);
            if (state == EntityState.NEW) {
                sloganService.saveData(slogan);
            }
            if (state == EntityState.DELETED) {
                sloganService.delData(slogan);
            }
            if (state == EntityState.MODIFIED) {
                sloganService.saveData(slogan);
            }
        }
        return null;
    }
    /**
     * åˆ é™¤æ•°æ®
     * sloganPR#delData
     *
     * @param data
     * @return
     */
    @Expose
    public void delData(Slogan data) {
        Slogan slogan = new Slogan();
        BeanUtils.copyProperties(data, slogan);
        sloganService.delData(slogan);
    }
    /**
     * sloganPR#push
     * @return
     */
    @Expose
    @Transactional
    public void push(Slogan data) {
        //设置全部标语为不启用
        List<Slogan> slogans = sloganService.listData(null);
        if(null != slogans && slogans.size() > 0){
            for (Slogan slogan1 : slogans) {
                slogan1.setStatus(Constant.YN_N);
                sloganService.saveData(slogan1);
            }
        }
        //设置当前标语为启用
        Slogan slogan = new Slogan();
        BeanUtils.copyProperties(data, slogan);
        slogan.setStatus(Constant.YN_Y);
        slogan.setPushTime(new Date());
        slogan.setPushUser(ContextUtil.getLoginUserName());
        sloganService.saveData(slogan);
        // é€šçŸ¥å‰ç«¯
        WebSocketPacket packet = new WebSocketPacket();
        packet.setBizType("screen");
        packet.setCompanyId(data.getCompanyId());
        packet.setDeptId(data.getCompanyId());
        packet.setBizId("slogan");
        packet.setOrderResp(OrderRespEnum.ORDER_INPROGRESS.getCode());
        packet.setData(slogan);
        WebSocketServer.sendByPocket(packet);
    }
}
fzzy-igdss-view/src/main/java/models/core.model.xml
@@ -1765,4 +1765,86 @@
      <Property name="label">更新人</Property>
    </PropertyDef>
  </DataType>
  <DataType name="dtSlogan">
    <Property name="creationType">com.fzzy.igds.domain.Slogan</Property>
    <PropertyDef name="id">
      <Property></Property>
      <Property name="label">编号</Property>
    </PropertyDef>
    <PropertyDef name="companyId">
      <Property></Property>
      <Property name="label">组织编码</Property>
    </PropertyDef>
    <PropertyDef name="name">
      <Property></Property>
      <Property name="label">名称</Property>
    </PropertyDef>
    <PropertyDef name="content">
      <Property></Property>
      <Property name="label">标语内容</Property>
    </PropertyDef>
    <PropertyDef name="status">
      <Property></Property>
      <Property name="label">状态</Property>
      <Property name="mapping">
        <Property name="mapValues">
          <Collection>
            <Entity>
              <Property name="key">N</Property>
              <Property name="value">未使用</Property>
            </Entity>
            <Entity>
              <Property name="key">Y</Property>
              <Property name="value">正在使用</Property>
            </Entity>
          </Collection>
        </Property>
        <Property name="keyProperty">key</Property>
        <Property name="valueProperty">value</Property>
      </Property>
    </PropertyDef>
    <PropertyDef name="color">
      <Property name="mapping">
        <Property name="mapValues">
          <Collection>
            <Entity>
              <Property name="key">default</Property>
              <Property name="value">默认</Property>
            </Entity>
            <Entity>
              <Property name="key">red</Property>
              <Property name="value">红色</Property>
            </Entity>
          </Collection>
        </Property>
        <Property name="keyProperty">key</Property>
        <Property name="valueProperty">value</Property>
      </Property>
      <Property name="label">颜色</Property>
    </PropertyDef>
    <PropertyDef name="pushUser">
      <Property></Property>
      <Property name="label">推送人</Property>
    </PropertyDef>
    <PropertyDef name="pushTime">
      <Property name="dataType">Date</Property>
      <Property name="label">发布时间</Property>
    </PropertyDef>
    <PropertyDef name="createTime">
      <Property name="dataType">Date</Property>
      <Property name="label">创建时间</Property>
    </PropertyDef>
    <PropertyDef name="createBy">
      <Property></Property>
      <Property name="label">创建人</Property>
    </PropertyDef>
    <PropertyDef name="updateTime">
      <Property name="dataType">Date</Property>
      <Property name="label">修改时间</Property>
    </PropertyDef>
    <PropertyDef name="updateBy">
      <Property></Property>
      <Property name="label">修改人</Property>
    </PropertyDef>
  </DataType>
</Model>
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java
@@ -3,7 +3,9 @@
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.domain.Dept;
import com.fzzy.igds.domain.DicArea;
import com.fzzy.igds.domain.Slogan;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.sys.manager.common.CommonManager;
import com.fzzy.sys.manager.gropu.GroupManager;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.stereotype.Controller;
@@ -24,6 +26,8 @@
    @Resource
    private GroupManager groupManager;
    @Resource
    private CommonManager commonManager;
    private String prefix = "group";
@@ -38,9 +42,11 @@
        view.put(Constant.MODEL_KEY_LOGIN_USER, user);
        view.put("deptId", user.getDeptId());
        view.put("sysName", "智慧粮库质押监管大屏");
        // æ ‡è¯­
        Slogan dicSlogan = commonManager.getDicSlogan();
        view.put("dicSlogan", dicSlogan);
        //查询库区信息
        List<Dept> deptList = groupManager.getAllDept(user.getCompanyId());
@@ -61,7 +67,9 @@
        view.put("deptId", user.getDeptId());
        view.put("sysName", "智慧粮库质押监管大屏");
        // æ ‡è¯­
        Slogan dicSlogan = commonManager.getDicSlogan();
        view.put("dicSlogan", dicSlogan);
        //查询库区信息
        List<Dept> deptList = groupManager.getAllDept(user.getCompanyId());
@@ -82,6 +90,9 @@
        view.put("deptId", user.getDeptId());
        view.put("sysName", "智慧粮库质押监管大屏");
        // æ ‡è¯­
        Slogan dicSlogan = commonManager.getDicSlogan();
        view.put("dicSlogan", dicSlogan);
        view.put("defaultAreaCode", "650000");
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java
@@ -1,10 +1,8 @@
package com.fzzy.sys.manager.common;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.DepotType;
import com.fzzy.igds.domain.Camera;
import com.fzzy.igds.domain.Company;
import com.fzzy.igds.domain.Depot;
import com.fzzy.igds.domain.Dept;
import com.fzzy.igds.domain.*;
import com.fzzy.igds.service.*;
import com.fzzy.igds.utils.ContextUtil;
import com.ruoyi.common.core.domain.entity.SysDept;
@@ -45,6 +43,9 @@
    private FileService fileService;
    @Resource
    private CoreCompanyService coreCompanyService;
    @Resource
    private SloganService sloganService;
    /**
     * æ ¹æ®åº“区编码获取库区下所有仓库列表
     *
@@ -172,5 +173,19 @@
     */
    public  List<Company>  listCompanyData() {
        SysUser user = ContextUtil.getLoginUser();
        return coreCompanyService.listCompany(null, null, user.getDeptId() + "");    }
        return coreCompanyService.listCompany(null, null, user.getDeptId() + "");
    }
    /**
     * èŽ·å–å¯ç”¨çš„å¤§å±æ ‡è¯­
     * @return
     */
    public Slogan getDicSlogan() {
        List<Slogan> slogans = sloganService.listData(Constant.YN_Y);
        if(null == slogans || slogans.isEmpty()){
            return null;
        }
        return slogans.get(0);
    }
}
fzzy-igdss-web/src/main/resources/static/common/igds-common.js
@@ -58,7 +58,8 @@
    // å‘生了错误事件
    socket.onerror = function () {
        alert("Socket error……");
        // alert("Socket error……");
        console.log("Socket error……");
    };
    $(window).unload(function () {
@@ -238,6 +239,24 @@
    window.location.href = url;
}
/**
 * åˆå§‹æ ‡è¯­æ•°æ®
 */
function initDicSlogan() {
    if (dicSlogan) {
        if (dicSlogan.color == "red") {
            $("#sloganText").css({
                color: "#DE2910"
            });
        } else {
            $("#sloganText").css({
                color: "#7ddfff"
            });
        }
        $("#sloganText").text(dicSlogan.content);
    }
}
//浏览器全屏
var fullscreen = false;
fzzy-igdss-web/src/main/resources/static/group/gis.js
@@ -25,7 +25,7 @@
    //初始化时间
    initTime();
    initDicSlogan();
    //初始化地图
    initMap();
@@ -63,8 +63,21 @@
            kai2.addClass('menu-h')
        }
    });
    // åˆå§‹åŒ–WebSocket
    initWS(companyId,"screen",null,null);
});
// socket信息返回處理
function socketOnMessage(pocket) {
    //console.log(pocket);
    if (pocket.bizId == "slogan") {
        var data = pocket.data;
        dicSlogan = data;
        initDicSlogan();
    }
}
// åˆ·æ–°æ—¶é—´
function initTime() {
    setInterval(function () {
fzzy-igdss-web/src/main/resources/static/group/index.js
@@ -25,10 +25,9 @@
    // åˆå§‹åŒ–页面
    init();
    //提醒
    // showTip("双击页面标语,切换全屏");
    // åˆå§‹åŒ–WebSocket
    initWS(companyId,"screen",null,null);
});
// åˆå§‹åŒ–页面
function init() {
@@ -38,7 +37,7 @@
    initTime();
    // åˆå§‹åŒ–图表
    initChart();
    initDicSlogan();
    //初始化地图
    initMap();
@@ -54,6 +53,16 @@
    // ajaxMsg();
}
// socket信息返回處理
function socketOnMessage(pocket) {
    //console.log(pocket);
    if (pocket.bizId == "slogan") {
        var data = pocket.data;
        dicSlogan = data;
        initDicSlogan();
    }
}
//加载库区地图位置
function renderMap() {
    var myChart = mapChart;
fzzy-igdss-web/src/main/resources/static/group/video.js
@@ -77,6 +77,9 @@
$(function () {
    // åˆå§‹åŒ–页面
    initHtml();
    // åˆå§‹åŒ–WebSocket
    initWS(companyId,"screen",null,null);
});
// åˆå§‹åŒ–页面
@@ -84,6 +87,8 @@
    // æ—¶é—´
    initTime();
    initDicSlogan();
    //监控点信息适应滚动
    initScrollbar(60);
    //库区信息
@@ -92,6 +97,16 @@
    // renderCamera();
}
// socket信息返回處理
function socketOnMessage(pocket) {
    //console.log(pocket);
    if (pocket.bizId == "slogan") {
        var data = pocket.data;
        dicSlogan = data;
        initDicSlogan();
    }
}
// æ¸²æŸ“库区信息
function renderDeptArea() {
fzzy-igdss-web/src/main/resources/templates/group/index.html
@@ -271,6 +271,7 @@
    var userId = [[${loginUser.loginName}]];
    var companyId = [[${loginUser.companyId}]];
    var deptId = [[${deptId}]];
    var dicSlogan = [[${dicSlogan}]];
    var deptList = [[${deptList}]];
</script>
</body>