gongdecai há 3 anos atrás
pai
commit
b0bb7ec39c

+ 1 - 0
winsea-haixin-platform-backend/pom.xml

@@ -171,6 +171,7 @@
             <artifactId>japidocs</artifactId>
             <version>1.4.3</version>
         </dependency>
+
     </dependencies>
 
     <build>

+ 10 - 0
winsea-haixin-plugin-yiliangyiyun/pom.xml

@@ -76,6 +76,16 @@
             <artifactId>dom4j</artifactId>
             <version>2.1.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.1.14.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.1.3.RELEASE</version>
+        </dependency>
     </dependencies>
 
 

+ 3 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/BiInfoController.java

@@ -212,14 +212,17 @@ public class BiInfoController {
         // 今日装车
         int inCount = tranCarInfoService.selectCount(new EntityWrapper<TranCarInfo>()
                 .eq("status_flag", "3")
+                .eq("comp_id", companyId)
                 .eq("update_date", DateUtil.formatDate(new Date(), DateUtils.DATE_FMT_YYYY_MM_DD)));
         //今日在途
         int inAfterCount = tranCarInfoService.selectCount(new EntityWrapper<TranCarInfo>()
                 .eq("status_flag", "3")
+                .eq("comp_id", companyId)
                 .lt("update_date", DateUtil.formatDate(new Date(), DateUtils.DATE_FMT_YYYY_MM_DD)));
         //今日在途
         int outCount = tranCarInfoService.selectCount(new EntityWrapper<TranCarInfo>()
                 .eq("status_flag", "5")
+                .eq("comp_id", companyId)
                 .eq("update_date", DateUtil.formatDate(new Date(), DateUtils.DATE_FMT_YYYY_MM_DD)));
         BiViewInfo biViewInfo = new BiViewInfo();
         BiViewInfo biViewInfo1 = new BiViewInfo();

+ 28 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/CommonUserController.java

@@ -1,6 +1,7 @@
 package com.yh.saas.plugin.yiliangyiyun.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.winsea.svc.base.base.entity.CommonCompany;
 import com.winsea.svc.base.base.entity.CommonStaff;
@@ -8,20 +9,26 @@ import com.winsea.svc.base.base.entity.CommonStaffRole;
 import com.winsea.svc.base.base.service.ICommonCompanyService;
 import com.winsea.svc.base.base.service.ICommonStaffService;
 import com.winsea.svc.base.base.util.ClientTypeChecker;
+import com.winsea.svc.base.base.util.MessagePusherUtils;
 import com.winsea.svc.base.security.entity.Account;
 import com.winsea.svc.base.security.exception.AuthErrorCodeEnums;
 import com.winsea.svc.base.security.exception.AuthException;
 import com.winsea.svc.base.security.service.IAccountService;
+import com.winsea.svc.base.security.util.AuthSecurityUtils;
 import com.winsea.svc.base.security.vo.command.AuthUserCommand;
 import com.winsea.svc.notice.entity.NoticeTaskInfo;
+import com.yh.saas.common.support.util.IdGenerator;
 import com.yh.saas.common.support.util.StringUtils;
 import com.yh.saas.plugin.yiliangyiyun.entity.CommonUser;
+import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
 import com.yh.saas.plugin.yiliangyiyun.exception.ServiceException;
 import com.yh.saas.plugin.yiliangyiyun.service.ICommonUserService;
+import com.yh.saas.plugin.yiliangyiyun.util.WebSocket;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -50,6 +57,8 @@ public class CommonUserController {
 
     @Autowired
     private ICommonCompanyService companyService;
+    @Autowired
+    private WebSocket webSocket;
 
     /**
      * 注册
@@ -259,5 +268,24 @@ public class CommonUserController {
     public void changeInfo(@RequestBody CommonStaff staff) {
         commonUserService.changeInfo(staff);
     }
+
+
+    @PostMapping("/test")
+    public void test() {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("msg", "1234567");
+        MessagePusherUtils.sendPrivateMessage(AuthSecurityUtils.getCurrentUserId(),JSONObject.toJSONString(jsonObject));
+//        UnimallMessage messageDO = new UnimallMessage();
+//        messageDO.setAdminId(AuthSecurityUtils.getCurrentUserId());
+//        messageDO.setCustomer(AuthSecurityUtils.getCurrentUserInfo().getLoginName());
+//        messageDO.setOperation("XX");
+//        messageDO.setResult("XX");
+//        messageDO.setGmtUpdate(new Date());
+//        messageDO.setGmtCreate(new Date());
+//        messageDO.setTaskId(IdGenerator.generateUUID());
+//        messageDO.setCompanyId(AuthSecurityUtils.getCurrentUserInfo().getCompId());
+//        messageDO.setPath("XXXXX");
+//        webSocket.sendOneMessage(messageDO);
+    }
 }
 

+ 21 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/UnimallMessageController.java

@@ -0,0 +1,21 @@
+package com.yh.saas.plugin.yiliangyiyun.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Gdc
+ * @since 2021-12-22
+ */
+@RestController
+@RequestMapping("/unimallMessage")
+public class UnimallMessageController {
+
+}
+

+ 55 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/UnimallMessage.java

@@ -0,0 +1,55 @@
+package com.yh.saas.plugin.yiliangyiyun.entity;
+
+import java.util.Date;
+import com.baomidou.mybatisplus.activerecord.Model;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.annotations.Version;
+
+import com.baomidou.mybatisplus.enums.IdType;
+import com.yh.saas.common.support.entity.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Gdc
+ * @since 2021-12-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("unimall_message")
+public class UnimallMessage extends BaseModel<UnimallMessage> {
+
+    private static final long serialVersionUID = 1L;
+    @TableId(type = IdType.UUID)
+    private String id;
+    private String customer;
+    private String operation;
+    private String result;
+    private Integer status;
+    private String taskId;
+    /**
+     * 消息跳转路径
+     */
+    private String path;
+    private Date gmtCreate;
+    private Date gmtUpdate;
+    private String adminId;
+    private String userId;
+    private String companyId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/mapper/UnimallMessageMapper.java

@@ -0,0 +1,16 @@
+package com.yh.saas.plugin.yiliangyiyun.mapper;
+
+import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Gdc
+ * @since 2021-12-22
+ */
+public interface UnimallMessageMapper extends BaseMapper<UnimallMessage> {
+
+}

+ 16 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IUnimallMessageService.java

@@ -0,0 +1,16 @@
+package com.yh.saas.plugin.yiliangyiyun.service;
+
+import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
+import com.baomidou.mybatisplus.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Gdc
+ * @since 2021-12-22
+ */
+public interface IUnimallMessageService extends IService<UnimallMessage> {
+
+}

+ 20 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/UnimallMessageServiceImpl.java

@@ -0,0 +1,20 @@
+package com.yh.saas.plugin.yiliangyiyun.service.impl;
+
+import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
+import com.yh.saas.plugin.yiliangyiyun.mapper.UnimallMessageMapper;
+import com.yh.saas.plugin.yiliangyiyun.service.IUnimallMessageService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Gdc
+ * @since 2021-12-22
+ */
+@Service
+public class UnimallMessageServiceImpl extends ServiceImpl<UnimallMessageMapper, UnimallMessage> implements IUnimallMessageService {
+
+}

+ 124 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/WebSocket.java

@@ -0,0 +1,124 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+//import com.iotechn.unimall.data.domain.AdminDO;
+//import com.iotechn.unimall.data.domain.MessageDO;
+//import com.iotechn.unimall.data.domain.RoleDO;
+//import com.iotechn.unimall.data.mapper.AdminMapper;
+//import com.iotechn.unimall.data.mapper.RoleMapper;
+
+import com.yh.saas.plugin.yiliangyiyun.entity.UnimallMessage;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/websocket/{staffId}")
+@Service
+//此注解相当于设置访问URL
+public class WebSocket {
+
+    private Session session;
+    private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();
+    private static Map<String, Session> sessionPool = new HashMap<String, Session>();
+
+//    private static RoleMapper  roleMapper;
+//    private static AdminMapper  adminMapper;
+
+//    @Autowired
+//    public void setRoleService(RoleMapper  roleMapper) {
+//        com.iotechn.unimall.admin.config.WebSocket.roleMapper= roleMapper;
+//    }
+//
+//    @Autowired
+//    public void setAdminService(AdminMapper  adminMapper) {
+//        com.iotechn.unimall.admin.config.WebSocket.adminMapper= adminMapper;
+//    }
+
+    @OnOpen
+    public void onOpen(Session session, @PathParam(value="staffId")String adminId) {
+        this.session = session;
+        webSockets.add(this);
+        sessionPool.put(adminId, session);
+        System.out.println("adminId = " + adminId + "【websocket消息】有新的连接,总数为:" + webSockets.size());
+    }
+
+    @OnClose
+    public void onClose() {
+        webSockets.remove(this);
+        System.out.println("【websocket消息】连接断开,总数为:" + webSockets.size());
+    }
+
+    @OnMessage
+    public void onMessage(String message) {
+        System.out.println("【websocket消息】收到客户端消息:" + message);
+    }
+
+    // 此为广播消息
+    public void sendAllMessage(UnimallMessage messageDO) {
+        for (WebSocket webSocket : webSockets) {
+            System.out.println("【websocket消息】广播消息:" + messageDO.getCustomer() + messageDO.getOperation() + messageDO.getResult() + "$" + messageDO.getPath());
+            try {
+                webSocket.session.getAsyncRemote().sendText(messageDO.getCustomer() + messageDO.getOperation() + messageDO.getResult() + "$" + messageDO.getPath());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // 此为单点消息
+    public void sendOneMessage(UnimallMessage messageDO) {
+//        sendAllMessage(messageDO);
+        System.out.println("【websocket消息 : " + messageDO.getAdminId() + "】单点消息:" + messageDO.getCustomer() + messageDO.getOperation() + messageDO.getResult() + "$" + messageDO.getPath());
+        Session session = sessionPool.get(messageDO.getAdminId() + "");
+        if (session != null) {
+            try {
+//                session.getAsyncRemote().sendObject(messageDO);
+//                session.getBasicRemote().sendObject(messageDO);
+                session.getAsyncRemote().sendText(messageDO.getCustomer() + messageDO.getOperation() + messageDO.getResult() + "$" + messageDO.getPath());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } else {
+            System.out.println("【websocket消息 session is null ");
+        }
+    }
+
+    // 根据角色发送消息
+//    public  void sendMessageByRole(UnimallMessage messageDO ,String role ,Long companyId){
+//        // 根据role 获取roleId
+//        List<RoleDO> roleDOs = roleMapper.selectList(new EntityWrapper<RoleDO>().like("name","%"+role+"%").eq("company_id",companyId));
+//        if(!CollectionUtils.isEmpty(roleDOs)){
+//            RoleDO roleDO = roleDOs.get(0);
+//            // 根据roleID  查询adminid
+//            List<AdminDO> adminDOList = adminMapper.selectList(new EntityWrapper<AdminDO>().eq("company_id",companyId).like("role_ids","%"+roleDO.getId()+"%"));
+//            if(!CollectionUtils.isEmpty(adminDOList)){
+//                adminDOList.forEach(adminDO -> {
+//                    System.out.println("【websocket消息 : "+adminDO.getId()+"】单点消息:"+messageDO.getCustomer()+messageDO.getOperation()+messageDO.getResult()+"$"+messageDO.getPath());
+//                    Session session = sessionPool.get(adminDO.getId()+"");
+//                    if (session != null) {
+//                        try {
+//                            session.getAsyncRemote().sendText(messageDO.getCustomer()+messageDO.getOperation()+messageDO.getResult()+"$"+messageDO.getPath());
+//                        } catch (Exception e) {
+//                            e.printStackTrace();
+//                        }
+//                    }
+//                    else{
+//                        System.out.println("【websocket消息 session is null ");
+//                    }
+//                });
+//
+//
+//            }
+//        }
+//    }
+
+}

+ 18 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/WebSocketConfig.java

@@ -0,0 +1,18 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+    /**
+     * 注入ServerEndpointExporter,
+     * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
+     */
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+
+}

+ 5 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/resources/mapper/UnimallMessageMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yh.saas.plugin.yiliangyiyun.mapper.UnimallMessageMapper">
+
+</mapper>