2021与蓝度共同重构项目,服务端
liuhaonan
2022-01-18 084da21b87bddb997ab627a4ef1899230a3a293a
功能完善
已修改6个文件
已添加12个文件
456 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/FileOperationRecord.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/PoleXixunPlayerEntity.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/PoleXixunPlayerEntityMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/FileOperationRecordMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/PoleXixunPlayerEntityMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/XiXunConfig.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LedSFileController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/CommandPro.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/ItemPro.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/ProgramPro.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/SchedulePro.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/TaskPro.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/XixunPlayerPro.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/XiXunPlayerService.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/JsonUtil.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/StringUtil.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/FileOperationRecord.java
@@ -61,6 +61,11 @@
     */
    private String fileName;
    /**
     * 1:LED诺瓦 2:LED熙讯 3:ip音柱
     */
    private Integer dataType;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/domain/PoleXixunPlayerEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.sandu.ximon.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
/**
 *
 * @TableName pole_xixun_player
 */
@TableName(value ="pole_xixun_player")
@Data
public class PoleXixunPlayerEntity implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long programId;
    /**
     *
     */
    private String programCode;
    /**
     *
     */
    private String programName;
    /**
     *
     */
    private String totalSize;
    /**
     *
     */
    private Long width;
    /**
     *
     */
    private Long height;
    /**
     *
     */
    private String requestBody;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private String creatTime;
    /**
     *
     */
    private Long createUserId;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/mapper/PoleXixunPlayerEntityMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.dao.mapper;
import com.sandu.ximon.dao.domain.PoleXixunPlayerEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * @Entity com.sandu.ximon.dao.domain.PoleXixunPlayerEntity
 */
@Mapper
public interface PoleXixunPlayerEntityMapper extends BaseMapper<PoleXixunPlayerEntity> {
}
dao/src/main/resources/mapper/FileOperationRecordMapper.xml
@@ -14,11 +14,13 @@
            <result property="width" column="width" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="fileName" column="file_name" jdbcType="VARCHAR"/>
            <result property="dataType" column="data_type" jdbcType="INTEGER"/>
    </resultMap>
    <sql id="Base_Column_List">
        file_id,origin_name,file_url,
        file_type,file_size,height,
        width,create_time,file_name
        width,create_time,file_name,
        data_type
    </sql>
</mapper>
dao/src/main/resources/mapper/PoleXixunPlayerEntityMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
<?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.sandu.ximon.dao.mapper.PoleXixunPlayerEntityMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.PoleXixunPlayerEntity">
            <id property="programId" column="program_id" jdbcType="BIGINT"/>
            <result property="programCode" column="program_code" jdbcType="VARCHAR"/>
            <result property="programName" column="program_name" jdbcType="VARCHAR"/>
            <result property="totalSize" column="total_size" jdbcType="VARCHAR"/>
            <result property="width" column="width" jdbcType="BIGINT"/>
            <result property="height" column="height" jdbcType="BIGINT"/>
            <result property="requestBody" column="request_body" jdbcType="VARCHAR"/>
            <result property="creatTime" column="creat_time" jdbcType="TIMESTAMP"/>
            <result property="createUserId" column="create_user_id" jdbcType="BIGINT"/>
    </resultMap>
    <sql id="Base_Column_List">
        program_id,program_code,program_name,
        total_size,width,height,
        request_body,creat_time,create_user_id
    </sql>
</mapper>
ximon-admin/src/main/java/com/sandu/ximon/admin/config/XiXunConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.sandu.ximon.admin.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
 * @Author liuhaonan
 * @Date 2022/1/18 16:58
 * @Version 1.0
 */
@Data
@Configuration
public class XiXunConfig {
    @Value("${server.port}")
    private String port;
    private String ip = "222.129.11.36";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java
@@ -38,11 +38,11 @@
    @GetMapping("/list")
    public ResponseVO<Object> list(BaseConditionVO baseConditionVO, @RequestParam(value = "keyword", required = false) String keyword){
        PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        LambdaQueryWrapper<IpVolumeFile> wrapper = ipVolumeFileService.listFile(keyword);
        if (null != keyword) {
       // PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        LambdaQueryWrapper<IpVolumeFile> wrapper = ipVolumeFileService.listFile(baseConditionVO, keyword);
      /*  if (null != keyword) {
            wrapper.like(IpVolumeFile::getFileName, keyword);
        }
        return ResponseUtil.successPage(ipVolumeFileService.list(wrapper));
        }*/
        return ResponseUtil.success(ipVolumeFileService.list(wrapper));
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LedSFileController.java
@@ -54,12 +54,14 @@
        return ResponseUtil.success(ledProgramFileService.list(wrapper));
    }
    @PostMapping("/uploading")
    public ResponseVO<Object> uploadingFile(@RequestParam("file") MultipartFile file) {
    @PostMapping("/uploading/{dateType}")
    public ResponseVO<Object> uploadingFile(@RequestParam("file") MultipartFile file,@PathVariable Integer dateType) {
        FileUploadDto fileUploadDto = aliOssFileService.uploadFile(file);
        FileOperationRecord fileOperationRecord = new FileOperationRecord();
        BeanUtils.copyProperties(fileUploadDto, fileOperationRecord);
        return ResponseUtil.success(fileOperationRecordService.save(fileOperationRecord));
        fileOperationRecord.setDataType(dateType);
        fileOperationRecordService.save(fileOperationRecord);
        return ResponseUtil.success(fileUploadDto);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/CommandPro.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
@Data
public class CommandPro {
    private String id;
    private String preDownloadURL;
    private String notificationURL;
    private TaskPro task;
    private String _type = "PlayXixunTask";
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/ItemPro.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
import java.util.List;
@Data
public class ItemPro {
    private String _id;                    //UUID
    private ProgramPro _program;            //将包装好的节目赋值给他
    private int repeatTimes;                //重复次数
    private List<SchedulePro> schedulePros =null;    //可以为一个program添加多个定时段
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/ProgramPro.java
@@ -9,10 +9,10 @@
    private Long programId;
    private String  _id;                    //请使用UUID赋值
    private String name;                    //好记的名字
    private int width;                    //节目宽
    private int height;                    //节目高度
    private Long width;                    //节目宽
    private Long height;                    //节目高度
    private List<LayerPro> layers;            //所有素材都包含在该list中
    private long totalSize;                //将layers中的sources的size累加赋值给他,表示节目所有素材占用的空间
    private Long totalSize;                //将layers中的sources的size累加赋值给他,表示节目所有素材占用的空间
    //如果为true,则该节目来自第三方接口,不是来自我们自己的web,二次开发请务必赋值为true
    private boolean isOthers=true;
    private int version;                    //2为简易节目,9为定点节目,其他为高级节目,请赋值其他。
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/SchedulePro.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
package com.sandu.ximon.admin.entity;
public class SchedulePro {
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/TaskPro.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
import java.util.List;
@Data
public class TaskPro {
    private String _id;                    //使用UUID赋值
    private String name;                    //节目名
    private List<ItemPro> items;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/entity/XixunPlayerPro.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.sandu.ximon.admin.entity;
import lombok.Data;
@Data
public class XixunPlayerPro {
    private String type="commandXixunPlayer";
    private String _id;
    private CommandPro command;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.param.IpVolumeFileParam;
import com.sandu.ximon.admin.param.ReceiveParam;
@@ -48,8 +50,9 @@
        return removeById(fileId);
    }
    public LambdaQueryWrapper<IpVolumeFile> listFile(String keyword) {
    public LambdaQueryWrapper<IpVolumeFile> listFile(BaseConditionVO baseConditionVO, String keyword) {
        LambdaQueryWrapper<IpVolumeFile> wrapper = Wrappers.lambdaQuery(IpVolumeFile.class).eq(IpVolumeFile::getClientId, clientService.getClientId());
        PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
        if (keyword.isEmpty()) {
            return wrapper;
        } else {
ximon-admin/src/main/java/com/sandu/ximon/admin/service/XiXunPlayerService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
package com.sandu.ximon.admin.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.config.XiXunConfig;
import com.sandu.ximon.admin.entity.*;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.JsonUtil;
import com.sandu.ximon.dao.domain.PoleXixunPlayerEntity;
import com.sandu.ximon.dao.mapper.PoleXixunPlayerEntityMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
@AllArgsConstructor
public class XiXunPlayerService extends BaseServiceImpl<PoleXixunPlayerEntityMapper, PoleXixunPlayerEntity> {
    private final PoleXixunPlayerEntityMapper poleXixunPlayerEntityMapper;
    private final XiXunConfig config;
    public void insert(ProgramPro programPro, Long userId) {
        SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
        Date date = new Date();
//        Program program = new Program();
//        try {
//            program = JsonUtil.convertJsonStringToObject(json,Program.class);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        String json = JsonUtil.jsonObj2Sting(programPro);
        PoleXixunPlayerEntity poleXixunPlayer = new PoleXixunPlayerEntity();
        poleXixunPlayer.setProgramCode(programPro.get_id());
        poleXixunPlayer.setProgramName(programPro.getName());
        poleXixunPlayer.setHeight(programPro.getHeight());
        poleXixunPlayer.setWidth(programPro.getWidth());
        poleXixunPlayer.setTotalSize((float) programPro.getTotalSize()/1000000+"MB");
        poleXixunPlayer.setRequestBody(json);
        poleXixunPlayer.setCreatTime(sdf.format(date));
        poleXixunPlayer.setCreateUserId(SecurityUtils.getClientId());
        this.save(poleXixunPlayer);
    }
    public void videoXixunPlayer(long programId,Long[] lightemitIds) {
        ProgramPro pro = new ProgramPro();
        ItemPro items = new ItemPro();
        TaskPro taskPro = new TaskPro();
        CommandPro command = new CommandPro();
        XixunPlayerPro xixun = new XixunPlayerPro();
        PoleXixunPlayerEntity poleXixunPlayerEntity = new PoleXixunPlayerEntity();
        items.set_id(UUID.randomUUID().toString());
        QueryWrapper<PoleXixunPlayerEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("program_id",programId);
        poleXixunPlayerEntity = this.getOne(queryWrapper);
        String json = poleXixunPlayerEntity.getRequestBody();
        try {
            pro = JsonUtil.convertJsonStringToObject(json, ProgramPro.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        items.set_program(pro);
        items.setRepeatTimes(1);
        items.setSchedulePros(null);//定时段,不做定时可为null
        taskPro.set_id(UUID.randomUUID().toString());
        taskPro.setName(poleXixunPlayerEntity.getProgramName());
        List<ItemPro> list2=new ArrayList<ItemPro>();
        list2.add(items);
        taskPro.setItems(list2);
        command.setId(UUID.randomUUID().toString());
        //这里是下方的post回调地址,需要修改IP地址
        command.setNotificationURL("http://" + config.getIp() + ":" + config.getPort() + "/machine-fast/serv/download/getJSON");
        //资源下载链接的请求头
//        command.setPreDownloadURL("http://" + config.getIp() + ":" + config.getPort() + "/machine-fast/serv/download/downliadFileById/");
//        command.setTask(taskPro);
//        xixun.set_id(UUID.randomUUID().toString());
//        xixun.setCommand(command);
//        xixun.setType("commandXixunPlayer");    //命令固定类型,不可更改
        Gson gson = new GsonBuilder().disableHtmlEscaping().create();
//        String jsondata = JSON.toJSONString(xixun);
        String jsondata = gson.toJson(xixun);
       /* Collection<PoleLightemitEntity> poleLightemitEntities = poleLightemitService.listByIds(Arrays.asList(lightemitIds));
        if(poleLightemitEntities != null){
            for (PoleLightemitEntity entity: poleLightemitEntities) {
                lightemitUtils.clear(entity.getLightemitControlCode());
                poleLightemitService.updateRequestBody(entity.getLightemitControlCode(), jsondata);
                lightemitUtils.post(realtimeServerBean.getCommand() + entity.getLightemitControlCode(), jsondata);
            }
        }*/
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/JsonUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
package com.sandu.ximon.admin.utils;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import jdk.nashorn.internal.ir.ObjectNode;
import java.io.IOException;
public class JsonUtil {
    private static ObjectMapper objectMapper;
    static {
        objectMapper = new ObjectMapper();
        // ç’å‰§ç–†FAIL_ON_EMPTY_BEANS灞炴�э紝褰撳簭鍒楀寲绌哄璞′笉瑕佹姏寮傚父
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        // ç’å‰§ç–†FAIL_ON_UNKNOWN_PROPERTIES灞炴�э紝褰揓SON瀛楃涓蹭腑瀛樺湪Java瀵硅薄娌℃湁鐨勫睘鎬э紝蹇界暐
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
    /**
     * Convert Object to JsonString
     *
     * @param jsonObj
     * @return
     */
    public static String jsonObj2Sting(Object jsonObj) {
        String jsonString = null;
        try {
            jsonString = objectMapper.writeValueAsString(jsonObj);
        } catch (IOException e) {
            System.out.printf("pasre json Object[{}] to string failed.",jsonString);
        }
        return jsonString;
    }
    /**
     * Convert JsonString to Simple Object
     *
     * @param jsonString
     * @param cls
     * @return
     */
    public static <T> T jsonString2SimpleObj(String jsonString, Class<T> cls) {
        T jsonObj = null;
        try {
            jsonObj = objectMapper.readValue(jsonString, cls);
        } catch (IOException e) {
            System.out.printf("pasre json Object[{}] to string failed.",jsonString);
        }
        return jsonObj;
    }
    /**
     * Method that will convert object to the ObjectNode.
     *
     * @param object
     *            the source data; if null, will return null.
     * @return the ObjectNode data after converted.
     * @throws Exception
     */
    public static <T> ObjectNode convertObject2ObjectNode(T object)
            throws Exception {
        if (null == object) {
            return null;
        }
        ObjectNode objectNode = null;
        if (object instanceof String) {
            objectNode = convertJsonStringToObject((String) object,
                    ObjectNode.class);
        } else {
            objectNode = convertValue(object, ObjectNode.class);
        }
        return objectNode;
    }
    /**
     * Method that will convert the json string to destination by the type(cls).
     *
     * @param jsonString
     *            the source json string; if null, will return null.
     * @param cls
     *            the destination data type.
     * @return
     * @throws Exception
     */
    public static <T> T convertJsonStringToObject(String jsonString,
                                                  Class<T> cls) throws Exception {
        if (StringUtil.strIsNullOrEmpty(jsonString)) {
            return null;
        }
        try {
            T object = objectMapper.readValue(jsonString, cls);
            return object;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
    /**
     * Method that will convert from given value into instance of given value
     * type.
     *
     * @param fromValue
     * @param toValueType
     * @return
     * @throws Exception
     */
    private static <T> T convertValue(Object fromValue, Class<T> toValueType)
            throws Exception {
        try {
            return objectMapper.convertValue(fromValue, toValueType);
        } catch (IllegalArgumentException e) {
            throw new Exception(e);
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/StringUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.sandu.ximon.admin.utils;
public class StringUtil {
    public static boolean strIsNullOrEmpty(String s) {
        return (null == s || s.trim().length() < 1);
    }
}