Przeglądaj źródła

日照五莲代码提交

lihao16 11 miesięcy temu
rodzic
commit
a99a39e7ae
33 zmienionych plików z 1070 dodań i 39 usunięć
  1. 2 1
      smsb-camera/smsb-camera-start-web/src/main/resources/bootstrap.yml
  2. 5 2
      smsb-customer-manager/smsb-customer-manager-start-web/src/main/resources/bootstrap.yml
  3. 11 0
      smsb-device-manager/smsb-device-manager-adapter/src/main/java/com/inspur/device/web/controller/device/SmsbDeviceController.java
  4. 1 1
      smsb-device-manager/smsb-device-manager-app/src/main/java/com/inspur/device/quartz/job/StandbyRecordPullScheduleJob.java
  5. 1 0
      smsb-device-manager/smsb-device-manager-app/src/main/java/com/inspur/device/service/core/manage/SmsbDeviceManageServiceImpl.java
  6. 54 1
      smsb-device-manager/smsb-device-manager-app/src/main/java/com/inspur/device/service/core/manage/SmsbDeviceServiceImpl.java
  7. 14 0
      smsb-device-manager/smsb-device-manager-client/src/main/java/com/inspur/device/client/core/manage/SmsbDeviceService.java
  8. 29 0
      smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HeadCount.java
  9. 21 0
      smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HeadCountDayStatic.java
  10. 24 0
      smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HeadCountStaticRsp.java
  11. 14 0
      smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HourCountStatic.java
  12. 22 0
      smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/mapper/device/core/HeadCountMapper.java
  13. 38 0
      smsb-device-manager/smsb-device-manager-infrastructure/src/main/resources/mapper/device/core/HeadCountMapper.xml
  14. 10 6
      smsb-device-manager/smsb-device-manager-start-web/src/main/resources/bootstrap.yml
  15. 12 6
      smsb-device-manager/smsb-device-manager-start/src/main/resources/bootstrap.yml
  16. 2 1
      smsb-event-logging/smsb-event-logging-start-web/src/main/resources/bootstrap.yml
  17. 2 1
      smsb-event-logging/smsb-event-logging-start/src/main/resources/bootstrap.yml
  18. 2 1
      smsb-gateway/src/main/resources/bootstrap.yml
  19. 2 1
      smsb-message-bus/smsb-message-service-start/src/main/resources/bootstrap.yml
  20. 133 0
      smsb-orchestration-manager/smsb-orchestration-manager-adapter/src/main/java/com/inspur/smsb/orchestration/web/program/ItemTemplateController.java
  21. 59 0
      smsb-orchestration-manager/smsb-orchestration-manager-adapter/src/main/java/com/inspur/smsb/orchestration/web/workflow/WorkflowController.java
  22. 138 0
      smsb-orchestration-manager/smsb-orchestration-manager-app/src/main/java/com/inspur/smsb/orchestration/service/program/ItemTemplateServiceImpl.java
  23. 71 0
      smsb-orchestration-manager/smsb-orchestration-manager-app/src/main/java/com/inspur/smsb/orchestration/service/workflow/WorkflowServiceImpl.java
  24. 50 0
      smsb-orchestration-manager/smsb-orchestration-manager-client/src/main/java/com/inspur/smsb/orchestration/api/program/IItemTemplateService.java
  25. 23 0
      smsb-orchestration-manager/smsb-orchestration-manager-client/src/main/java/com/inspur/smsb/orchestration/api/workflow/WorkflowService.java
  26. 139 0
      smsb-orchestration-manager/smsb-orchestration-manager-client/src/main/java/com/inspur/smsb/orchestration/dto/item/ItemTemplateDTO.java
  27. 143 0
      smsb-orchestration-manager/smsb-orchestration-manager-infrastructure/src/main/java/com/inspur/smsb/orchestration/database/dataobject/program/ItemTemplate.java
  28. 18 0
      smsb-orchestration-manager/smsb-orchestration-manager-infrastructure/src/main/java/com/inspur/smsb/orchestration/database/mapper/program/ItemTemplateMapper.java
  29. 4 1
      smsb-orchestration-manager/smsb-orchestration-service-start/src/main/resources/bootstrap.yml
  30. 4 1
      smsb-orchestration-manager/smsb-orchestration-web-start/src/main/resources/bootstrap.yml
  31. 9 7
      smsb-oss-manager/smsb-oss-manage-consumer/src/main/resources/bootstrap.yml
  32. 11 7
      smsb-oss-manager/smsb-oss-manage-provider/src/main/resources/bootstrap.yml
  33. 2 2
      smsb-wechat-manager/smsb-wechat-manager-start-web/src/main/resources/bootstrap.yml

+ 2 - 1
smsb-camera/smsb-camera-start-web/src/main/resources/bootstrap.yml

@@ -8,7 +8,8 @@ spring:
     active: dev
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
       config:

+ 5 - 2
smsb-customer-manager/smsb-customer-manager-start-web/src/main/resources/bootstrap.yml

@@ -6,9 +6,12 @@ spring:
     name: smsb-customer-manager-web
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:20009
+      server-addr: 127.0.0.1:8848
       username: nacos
-      password: inspur-nacos
+      # password: inspur-nacos
+      password: nacos
       config:
         file-extension: yml
         refresh-enabled: true

+ 11 - 0
smsb-device-manager/smsb-device-manager-adapter/src/main/java/com/inspur/device/web/controller/device/SmsbDeviceController.java

@@ -6,6 +6,7 @@ import com.alibaba.cola.dto.Response;
 import com.alibaba.cola.dto.SingleResponse;
 import com.alibaba.excel.EasyExcelFactory;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.inspur.camera.service.CameraSnapPicScheduleService;
 import com.inspur.device.client.advertisement.AdDeviceInfoService;
 import com.inspur.device.client.core.log.DeviceErrorRecordService;
@@ -384,4 +385,14 @@ public class SmsbDeviceController {
         log.info("链客调用getDeviceStatusBySN,请求参数query:{}", query);
         return smsbDeviceService.getDeviceStatusBySN(query.getSerialNumberList());
     }
+
+    @PostMapping("/device/headCount/upload")
+    public JSONObject headCountUpload(@RequestBody JSONObject headCountUploadDto) {
+        return smsbDeviceService.headCountUpload(headCountUploadDto);
+    }
+
+    @GetMapping("/device/headCount/static")
+    public Response headCountStatic() {
+        return smsbDeviceService.headCountStatic();
+    }
 }

+ 1 - 1
smsb-device-manager/smsb-device-manager-app/src/main/java/com/inspur/device/quartz/job/StandbyRecordPullScheduleJob.java

@@ -28,7 +28,7 @@ public class StandbyRecordPullScheduleJob extends QuartzJobBean {
         LocalDateTime startTime = LocalDateTime.now();
         log.info("start pull deviceStandby data: {}", startTime);
         try {
-            infoService.pullDeviceStandbyRecord(startTime);
+            // infoService.pullDeviceStandbyRecord(startTime);
         } catch (Exception e) {
             log.error("pull deviceStandby data error: {}", e.getMessage(), e);
         }

+ 1 - 0
smsb-device-manager/smsb-device-manager-app/src/main/java/com/inspur/device/service/core/manage/SmsbDeviceManageServiceImpl.java

@@ -231,6 +231,7 @@ public class SmsbDeviceManageServiceImpl implements SmsbDeviceManageService {
         }
         // permit mqtt user and acl
         String username = String.valueOf(deviceDto.getId());
+        log.info("permit mqtt user and acl: {}", username);
         MqttUserDto mqttUserDto = mqttUserService.getMqttUserDtoByUsername(username);
         // 1 为主设备,0 为备用设备
         int role = deviceDto.getMasterId() == null ? 1 : 0;

+ 54 - 1
smsb-device-manager/smsb-device-manager-app/src/main/java/com/inspur/device/service/core/manage/SmsbDeviceServiceImpl.java

@@ -5,7 +5,10 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.cola.dto.MultiResponse;
 import com.alibaba.cola.dto.PageResponse;
 import com.alibaba.cola.dto.Response;
+import com.alibaba.cola.dto.SingleResponse;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -27,10 +30,11 @@ import com.inspur.device.constants.device.BaseDeviceTypeEnum;
 import com.inspur.device.constants.device.DeviceErrorEnum;
 import com.inspur.device.event.DeviceModifyedEvent;
 import com.inspur.device.infrastructure.data.device.advertisement.AdDeviceInfo;
-import com.inspur.device.infrastructure.data.device.core.SmsbDevice;
+import com.inspur.device.infrastructure.data.device.core.*;
 import com.inspur.device.infrastructure.data.device.relation.DeviceQueryCommand;
 import com.inspur.device.infrastructure.data.device.relation.SmsbDeviceDepartRelaDO;
 import com.inspur.device.infrastructure.mapper.device.advertisement.AdDeviceInfoMapper;
+import com.inspur.device.infrastructure.mapper.device.core.HeadCountMapper;
 import com.inspur.device.infrastructure.mapper.device.core.SmsbDeviceMapper;
 import com.inspur.device.object.advertisement.AdDeviceInfoDto;
 import com.inspur.device.object.core.device.BaseDeviceDto;
@@ -104,6 +108,10 @@ public class SmsbDeviceServiceImpl extends ServiceImpl<SmsbDeviceMapper, SmsbDev
     private SmsbDepartmentService smsbDepartmentService;
     @Autowired
     private AdDeviceInfoMapper adDeviceInfoMapper;
+
+    @Autowired
+    private HeadCountMapper headCountMapper;
+
     @Resource
     private ApplicationEventPublisher applicationEventPublisher;
     @Resource
@@ -1070,6 +1078,49 @@ public class SmsbDeviceServiceImpl extends ServiceImpl<SmsbDeviceMapper, SmsbDev
         return MultiResponse.of(BeanCopyUtils.copyList(this.baseMapper.getDeviceStatusByDate(serialNumberList, startDate, endDate), SmsbDeviceStandByDateCO.class));
     }
 
+    @Override
+    public JSONObject headCountUpload(JSONObject headCountUploadDto) {
+        log.info("headCountUploadDto : {}", headCountUploadDto);
+        JSONObject rs = new JSONObject();
+        rs.put("Code",0);
+        rs.put("Desc","ok");
+        String alarmId = headCountUploadDto.getString("AlarmId");
+        Date alarmTime = new Date();
+        Integer count = 0;
+        JSONObject result = headCountUploadDto.getJSONObject("Result");
+        Boolean headCount = result.getBoolean("HeadCount");
+        if (null == headCount || !headCount) {
+            return rs;
+        }
+        JSONArray properties = result.getJSONArray("Properties");
+        for (int i = 0; i < properties.size(); i++) {
+            JSONObject property = properties.getJSONObject(i);
+            String propertyStr = property.getString("property");
+            if("Count".equals(propertyStr)) {
+                count = Integer.valueOf(property.getString("display"));
+            }
+        }
+        log.info(alarmId + "-" + alarmTime + "-" + count);
+        HeadCount headCountBo = new HeadCount();
+        headCountBo.setCountNum(count);
+        headCountBo.setAlarmTime(alarmTime);
+        headCountBo.setAlarmId(alarmId);
+        headCountMapper.insert(headCountBo);
+        return rs;
+    }
+
+    @Override
+    public Response headCountStatic() {
+
+        HeadCountDayStatic dayStatic = headCountMapper.headCountStaticByDay();
+        HeadCountStaticRsp rsp = new HeadCountStaticRsp();
+        BeanUtils.copyProperties(dayStatic, rsp);
+        List<HourCountStatic> hourCountStaticList = headCountMapper.headCountStaticByHour();
+        rsp.setHourCountStaticList(hourCountStaticList);
+
+        return SingleResponse.of(rsp);
+    }
+
 
     private List<SmsbDeviceDto> listQueryCondition(QueryWrapper<SmsbDeviceDepartRelaDO> queryWrapper) {
         log.info("segment: {}", queryWrapper.getSqlSegment());
@@ -1115,4 +1166,6 @@ public class SmsbDeviceServiceImpl extends ServiceImpl<SmsbDeviceMapper, SmsbDev
         }
         return org.substring(0, lastIndex);
     }
+
+
 }

+ 14 - 0
smsb-device-manager/smsb-device-manager-client/src/main/java/com/inspur/device/client/core/manage/SmsbDeviceService.java

@@ -3,6 +3,7 @@ package com.inspur.device.client.core.manage;
 
 import com.alibaba.cola.dto.PageResponse;
 import com.alibaba.cola.dto.Response;
+import com.alibaba.fastjson.JSONObject;
 import com.inspur.device.object.advertisement.AdDeviceInfoDto;
 import com.inspur.device.object.core.manage.*;
 import com.inspur.device.object.core.relation.DeviceRelationPageQuery;
@@ -375,4 +376,17 @@ public interface SmsbDeviceService {
      * 根据设备SN、日期范围,查询设备开屏时长
      */
     Response getDeviceStatusByDate(List<String> serialNumberList, LocalDate startDate, LocalDate endDate);
+
+    /**
+     * 人流统计数据上传
+     * @param headCountUploadDto
+     * @return
+     */
+    JSONObject headCountUpload(JSONObject headCountUploadDto);
+
+    /**
+     * 人流统计数据查询
+     * @return
+     */
+    Response headCountStatic();
 }

+ 29 - 0
smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HeadCount.java

@@ -0,0 +1,29 @@
+package com.inspur.device.infrastructure.data.device.core;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 人流统计 head_count
+ * @author lihao16
+ */
+@Data
+@TableName("head_count")
+public class HeadCount implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String alarmId;
+
+    private Date alarmTime;
+
+    private Integer countNum;
+
+}

+ 21 - 0
smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HeadCountDayStatic.java

@@ -0,0 +1,21 @@
+package com.inspur.device.infrastructure.data.device.core;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HeadCountDayStatic implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer todayCount;
+
+    private Integer yesterdayCount;
+
+    private Integer weekCount;
+
+    private Integer lastWeekCount;
+
+    private Integer monthCount;
+}

+ 24 - 0
smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HeadCountStaticRsp.java

@@ -0,0 +1,24 @@
+package com.inspur.device.infrastructure.data.device.core;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class HeadCountStaticRsp implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer todayCount;
+
+    private Integer yesterdayCount;
+
+    private Integer weekCount;
+
+    private Integer lastWeekCount;
+
+    private Integer monthCount;
+
+    private List<HourCountStatic> hourCountStaticList;
+}

+ 14 - 0
smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/data/device/core/HourCountStatic.java

@@ -0,0 +1,14 @@
+package com.inspur.device.infrastructure.data.device.core;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HourCountStatic implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    private String timeKey;
+
+    private Integer countValue;
+}

+ 22 - 0
smsb-device-manager/smsb-device-manager-infrastructure/src/main/java/com/inspur/device/infrastructure/mapper/device/core/HeadCountMapper.java

@@ -0,0 +1,22 @@
+package com.inspur.device.infrastructure.mapper.device.core;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.inspur.device.infrastructure.data.device.core.HeadCount;
+import com.inspur.device.infrastructure.data.device.core.HeadCountDayStatic;
+import com.inspur.device.infrastructure.data.device.core.HeadCountStaticRsp;
+import com.inspur.device.infrastructure.data.device.core.HourCountStatic;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author lihao16
+ */
+@Mapper
+public interface HeadCountMapper extends BaseMapper<HeadCount> {
+    List<HourCountStatic> headCountStaticByHour();
+
+    HeadCountDayStatic headCountStaticByDay();
+}

+ 38 - 0
smsb-device-manager/smsb-device-manager-infrastructure/src/main/resources/mapper/device/core/HeadCountMapper.xml

@@ -0,0 +1,38 @@
+<?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.inspur.device.infrastructure.mapper.device.core.HeadCountMapper">
+
+    <resultMap id="dayMap" type="com.inspur.device.infrastructure.data.device.core.HeadCountDayStatic">
+        <result column="todayCount" property="todayCount"/>
+        <result column="yesterdayCount" property="yesterdayCount"/>
+        <result column="weekCount" property="weekCount"/>
+        <result column="lastWeekCount" property="lastWeekCount"/>
+        <result column="monthCount" property="monthCount"/>
+    </resultMap>
+
+    <select id="headCountStaticByHour" resultType="com.inspur.device.infrastructure.data.device.core.HourCountStatic">
+        SELECT
+            DATE_FORMAT( alarm_time, '%Y-%m-%d %H:00:00' ) AS timeKey,
+            SUM( count_num ) AS countValue
+        FROM
+            head_count
+        WHERE
+            DATE ( alarm_time ) = CURDATE()
+        GROUP BY
+            DATE_FORMAT( alarm_time, '%Y-%m-%d %H:00:00' )
+        ORDER BY
+            alarm_time ASC
+    </select>
+
+    <select id="headCountStaticByDay" resultMap="dayMap">
+        SELECT
+            SUM(CASE WHEN DATE(alarm_time) = CURDATE() THEN count_num ELSE 0 END) AS todayCount,
+            SUM(CASE WHEN DATE(alarm_time) = CURDATE() - INTERVAL 1 DAY THEN count_num ELSE 0 END) AS yesterdayCount,
+            SUM(CASE WHEN WEEK(alarm_time, 1) = WEEK(CURDATE(), 1) THEN count_num ELSE 0 END) AS weekCount,
+            SUM(CASE WHEN WEEK(alarm_time, 1) = WEEK(CURDATE() - INTERVAL 1 WEEK, 1) THEN count_num ELSE 0 END) AS lastWeekCount,
+            SUM(CASE WHEN YEAR(alarm_time) = YEAR(CURDATE()) AND MONTH(alarm_time) = MONTH(CURDATE()) THEN count_num ELSE 0 END) AS monthCount
+        FROM
+            head_count
+    </select>
+
+</mapper>

+ 10 - 6
smsb-device-manager/smsb-device-manager-start-web/src/main/resources/bootstrap.yml

@@ -5,20 +5,24 @@ spring:
     allow-bean-definition-overriding: true
     allow-circular-references: true
   profiles:
-    active: test
+    # active: test
+    active: dev
   cloud:
     nacos:
-      discovery:
-        enabled: true
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
-      server-addr: 10.180.88.84:8060
+      # discovery:
+        # enabled: true
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+      # server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      server-addr: 127.0.0.1:20009
+      # server-addr: 127.0.0.1:8848
       username: nacos
       password: inspur-nacos
       config:
         file-extension: yml
         refresh-enabled: true
         group: ${spring.application.name}
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
 
 ## 浪潮云环境、110.5、万福千屏
 #spring:

+ 12 - 6
smsb-device-manager/smsb-device-manager-start/src/main/resources/bootstrap.yml

@@ -6,20 +6,26 @@ spring:
     allow-bean-definition-overriding: true
     allow-circular-references: true
   profiles:
-    active: test
+    # active: test
+    active: dev
   cloud:
     nacos:
-      discovery:
-        enabled: true
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
-      server-addr: 10.180.88.84:8060
+      # discovery:
+        # enabled: true
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+        #namespace: public
+      # server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      server-addr: 127.0.0.1:20009
+      # server-addr: 127.0.0.1:8848
       username: nacos
       password: inspur-nacos
       config:
         file-extension: yml
         refresh-enabled: true
         group: ${spring.application.name}
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+        # namespace: public
 
 
 ## 浪潮云环境、110.5、万福千屏

+ 2 - 1
smsb-event-logging/smsb-event-logging-start-web/src/main/resources/bootstrap.yml

@@ -8,7 +8,8 @@ spring:
     name: smsb-event-logging-web
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
       config:

+ 2 - 1
smsb-event-logging/smsb-event-logging-start/src/main/resources/bootstrap.yml

@@ -9,7 +9,8 @@ spring:
     name: smsb-event-logging-service
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
       config:

+ 2 - 1
smsb-gateway/src/main/resources/bootstrap.yml

@@ -6,7 +6,8 @@ spring:
 #      discovery:
 #        enabled: true
 #        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
-      server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
       config:

+ 2 - 1
smsb-message-bus/smsb-message-service-start/src/main/resources/bootstrap.yml

@@ -7,7 +7,8 @@ spring:
     web-application-type: NONE
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
       config:

+ 133 - 0
smsb-orchestration-manager/smsb-orchestration-manager-adapter/src/main/java/com/inspur/smsb/orchestration/web/program/ItemTemplateController.java

@@ -0,0 +1,133 @@
+package com.inspur.smsb.orchestration.web.program;
+
+import com.alibaba.cola.dto.PageResponse;
+import com.alibaba.cola.dto.SingleResponse;
+import com.alibaba.fastjson.JSON;
+import com.inspur.customer.client.keycloak.KeycloakService;
+import com.inspur.logging.annotation.SmsbSysLog;
+import com.inspur.smsb.orchestration.api.program.IItemService;
+import com.inspur.smsb.orchestration.api.program.IItemTemplateService;
+import com.inspur.smsb.orchestration.consts.ComEnum;
+import com.inspur.smsb.orchestration.consts.ItemConstant;
+import com.inspur.smsb.orchestration.dto.item.ItemDTO;
+import com.inspur.smsb.orchestration.dto.item.ItemTemplateDTO;
+import io.minio.MinioClient;
+import io.minio.PutObjectArgs;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author lihao16
+ * @date 2024/11/18
+ */
+@Slf4j
+@RestController
+@RequestMapping("/item/template")
+@SmsbSysLog(value = 2, description = "节目模版控制器")
+public class ItemTemplateController {
+
+    @DubboReference
+    private IItemTemplateService itemTemplateService;
+
+    @DubboReference
+    private IItemService itemService;
+
+    @DubboReference
+    private KeycloakService keycloakService;
+
+    @Resource
+    private MinioClient minioClient;
+
+
+    public ItemTemplateController() {
+    }
+
+
+    @PostMapping("/listByPage")
+    public PageResponse<ItemTemplateDTO> findListByPage(@RequestBody ItemTemplateDTO itemTemplateDTOe) {
+        return itemTemplateService.findListByPage(itemTemplateDTOe, keycloakService.getUserMap());
+    }
+
+    @GetMapping("getById/{id}")
+    public SingleResponse findById(@PathVariable Long id) {
+        return itemTemplateService.queryById(id);
+    }
+
+    @PostMapping("/add")
+    public SingleResponse add(@RequestHeader String userId, @RequestBody ItemTemplateDTO itemTemplateDTO) {
+        log.info("userId: {}", userId);
+        itemTemplateDTO.setCreateBy(userId);
+        return itemTemplateService.saveItemTemplate(itemTemplateDTO);
+    }
+
+    @DeleteMapping("/delete")
+    public SingleResponse delete(Long id) {
+        return itemTemplateService.deleteById(id);
+    }
+
+    @PostMapping("/2item")
+    public SingleResponse template2Item(@RequestHeader String userId, String name, String org, String tenant,String resolutionRatio,
+                                        String itemJsonStr, MultipartFile file,String keyNameList,Long duration ) {
+        log.info("template2Item: {}", userId, name, org, tenant, resolutionRatio, itemJsonStr, file, keyNameList);
+        ItemDTO itemDTO = new ItemDTO();
+        log.info("userId: {}", userId);
+        itemDTO.setName(name);
+        itemDTO.setStatus(1);
+        itemDTO.setOrg(org);
+        itemDTO.setTenant(tenant);
+        itemDTO.setDuration(duration);
+        itemDTO.setResolutionRatio(resolutionRatio);
+        String itemConfigName = UUID.randomUUID() + ".json";
+        itemDTO.setItemConfigName(itemConfigName);
+        // 保存itemJsonStr至minio
+        try {
+            InputStream is = new ByteArrayInputStream(itemJsonStr.getBytes(StandardCharsets.UTF_8));
+            minioClient.putObject(PutObjectArgs.builder()
+                .bucket(ItemConstant.ITEM_FILE_JSON)
+                .object(itemConfigName)
+                .stream(is, is.available(), -1)
+                .build()
+            );
+        } catch (Exception e) {
+            e.printStackTrace();
+            return SingleResponse.buildFailure(ComEnum.UPDATE_FAILURE.getResultCode(), ComEnum.UPDATE_FAILURE.getResultMsg() + e.getMessage());
+        }
+        itemDTO.setCreateBy(userId);
+        itemDTO.setItemJsonStr(itemJsonStr);
+        // 将节目缩略图上传至minio
+        String imgUrl = UUID.randomUUID().toString();
+        if (null != file) {
+            try {
+                minioClient.putObject(PutObjectArgs.builder()
+                    .bucket(ItemConstant.IMG_URL)
+                    .object(imgUrl)
+                    .stream(file.getInputStream(), file.getSize(), -1)
+                    .build()
+                );
+            } catch (Exception e) {
+                log.info("节目更新异常{}", e.getMessage());
+            }
+        }
+        itemDTO.setImg(ItemConstant.IMG_URL + "/" + imgUrl);
+
+        List<String> keyNames = null;
+        if (StringUtils.isNotBlank(keyNameList)) {
+            keyNames = JSON.parseArray(keyNameList, String.class);
+        }
+        SingleResponse<Long> saveResp = itemService.saveItem(itemDTO, keyNames);
+        return saveResp;
+
+    }
+
+
+}

+ 59 - 0
smsb-orchestration-manager/smsb-orchestration-manager-adapter/src/main/java/com/inspur/smsb/orchestration/web/workflow/WorkflowController.java

@@ -1,7 +1,9 @@
 package com.inspur.smsb.orchestration.web.workflow;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.cola.dto.PageResponse;
 import com.alibaba.cola.dto.SingleResponse;
+import com.inspur.customer.client.keycloak.KeycloakService;
 import com.inspur.smsb.orchestration.api.workflow.WorkflowService;
 import com.inspur.smsb.orchestration.dto.workflow.PageRequestModel;
 import com.inspur.smsb.orchestration.dto.workflow.WorkflowDto;
@@ -26,6 +28,9 @@ public class WorkflowController {
     @DubboReference(timeout = 10000)
     private WorkflowService workflowService;
 
+    @DubboReference
+    private KeycloakService keycloakService;
+
 
     @ApiOperation(value = "保存或者更新", notes = "如果id字段为空,则是新增,否者是修改")
     @PostMapping("saveOrUpdate")
@@ -93,6 +98,17 @@ public class WorkflowController {
         return SingleResponse.of(Boolean.TRUE);
     }
 
+    @ApiOperation(value = "审核同意v2")
+    @GetMapping("reviewedAgree/v2")
+    public SingleResponse<Boolean> reviewedAgreeV2(@RequestHeader String userName,
+                                                   @ApiParam(value = "节点id") Long workflowNodeId,
+                                                   @ApiParam(value = "当前是处于几审") Integer currentSeveralReviewed,
+                                                   @ApiParam(value = "用户ID") String userId) {
+        validateReviewPermission(currentSeveralReviewed, userId);
+        workflowService.reviewedAgreeV2(workflowNodeId, userName,currentSeveralReviewed,userId);
+        return SingleResponse.of(Boolean.TRUE);
+    }
+
     @ApiOperation(value = "审核拒绝")
     @GetMapping("reviewedRefuse")
     public SingleResponse<Boolean> reviewedRefuse(@RequestHeader String userName, @ApiParam(value = "节点id") Long workflowNodeId, @ApiParam(value = "拒绝的理由") String reason) {
@@ -100,6 +116,17 @@ public class WorkflowController {
         return SingleResponse.of(Boolean.TRUE);
     }
 
+    @ApiOperation(value = "审核拒绝v2")
+    @GetMapping("reviewedRefuse/v2")
+    public SingleResponse<Boolean> reviewedRefuseV2(@RequestHeader String userName, @ApiParam(value = "节点id") Long workflowNodeId,
+                                                    @ApiParam(value = "拒绝的理由") String reason,
+                                                    @ApiParam(value = "当前是处于几审") Integer currentSeveralReviewed,
+                                                    @ApiParam(value = "用户ID") String userId) {
+        validateReviewPermission(currentSeveralReviewed, userId);
+        workflowService.reviewedRefuseV2(workflowNodeId, reason, userName,currentSeveralReviewed,userId);
+        return SingleResponse.of(Boolean.TRUE);
+    }
+
     @ApiOperation(value = "终止审核(终审)", notes = "调用此接口,会按审核同意来处理(如果是驳回,则无须调用此接口)")
     @GetMapping("endReviewed")
     public SingleResponse<Boolean> endReviewed(@RequestHeader String userName, @ApiParam(value = "节点id") Long workflowNodeId) {
@@ -107,4 +134,36 @@ public class WorkflowController {
         return SingleResponse.of(Boolean.TRUE);
     }
 
+    private void validateReviewPermission(Integer currentSeveralReviewed, String userId) {
+        // 超级管理员
+        Boolean isSuperAdmin = keycloakService.isExitTargetRole(userId, "ROLE_SUPER_ADMIN");
+        //三级审核员
+        Boolean isFinalLevel = keycloakService.isExitTargetRole(userId, "ROLE_FINAL_REVIEWER");
+        // 二级审核员
+        Boolean isSecondLevel = keycloakService.isExitTargetRole(userId, "ROLE_SECOND_LEVEL_REVIEWER");
+        // 一级审核员
+        Boolean isFirstLevel = keycloakService.isExitTargetRole(userId, "ROLE_FIRST_LEVEL_REVIEWER");
+        // 没有审核权限
+        if (!isSuperAdmin && !isFirstLevel && !isSecondLevel && !isFinalLevel) {
+            throw new RuntimeException("当前用户没有审核权限");
+        }
+        if (isSuperAdmin || isFinalLevel) {
+            return;
+        }
+        if (isSecondLevel) {
+            if (ObjectUtil.equal(currentSeveralReviewed, 2) || ObjectUtil.equal(currentSeveralReviewed, 1)) {
+                return;
+            }else {
+                throw new RuntimeException("当前用户没有审核权限");
+            }
+        }
+        if (isFirstLevel && ObjectUtil.equal(currentSeveralReviewed, 1)) {
+            return;
+        } else {
+            throw new RuntimeException("当前用户没有审核权限");
+        }
+
+    }
+
+
 }

+ 138 - 0
smsb-orchestration-manager/smsb-orchestration-manager-app/src/main/java/com/inspur/smsb/orchestration/service/program/ItemTemplateServiceImpl.java

@@ -0,0 +1,138 @@
+package com.inspur.smsb.orchestration.service.program;
+
+import com.alibaba.cola.dto.PageResponse;
+import com.alibaba.cola.dto.SingleResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.inspur.smsb.orchestration.api.program.IItemTemplateService;
+import com.inspur.smsb.orchestration.consts.ComEnum;
+import com.inspur.smsb.orchestration.consts.Constants;
+import com.inspur.smsb.orchestration.consts.ItemConstant;
+import com.inspur.smsb.orchestration.database.dataobject.program.ItemTemplate;
+import com.inspur.smsb.orchestration.database.mapper.program.ItemTemplateMapper;
+import com.inspur.smsb.orchestration.dto.item.ItemTemplateDTO;
+import io.minio.GetObjectArgs;
+import io.minio.MinioClient;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhanghongyan
+ * @since 2021-11-09
+ */
+@Slf4j
+@DubboService(interfaceClass = IItemTemplateService.class)
+public class ItemTemplateServiceImpl extends ServiceImpl<ItemTemplateMapper, ItemTemplate> implements IItemTemplateService {
+
+    @Resource
+    private MinioClient minioClient;
+
+    @Override
+    public PageResponse findListByPage(ItemTemplateDTO itemTemplateDTO, Map<String, String> map) {
+        Page<ItemTemplate> page = new Page(itemTemplateDTO.getCurrentPage(), itemTemplateDTO.getPageCount());
+        LambdaQueryWrapper<ItemTemplate> lambdaQueryWrapper = Wrappers.lambdaQuery(ItemTemplate.class);
+        lambdaQueryWrapper.eq(itemTemplateDTO.getId() != null, ItemTemplate::getId, itemTemplateDTO.getId())
+            .eq(StringUtils.isNotBlank(itemTemplateDTO.getItemConfigName()), ItemTemplate::getItemConfigName, itemTemplateDTO.getItemConfigName())
+            .eq(itemTemplateDTO.getInfoType() != null, ItemTemplate::getInfoType, itemTemplateDTO.getInfoType())
+            .eq(itemTemplateDTO.getTemplateType() != null, ItemTemplate::getTemplateType, itemTemplateDTO.getTemplateType())
+            .like(StringUtils.isNotBlank(itemTemplateDTO.getName()), ItemTemplate::getName, itemTemplateDTO.getName())
+            .eq(StringUtils.isNotBlank(itemTemplateDTO.getResolutionRatio()), ItemTemplate::getResolutionRatio, itemTemplateDTO.getResolutionRatio())
+            .orderByDesc(ItemTemplate::getUpdateTime)
+            .orderByAsc(ItemTemplate::getStatus);
+
+        if (Objects.nonNull(itemTemplateDTO.getTenant()) && StringUtils.isNotBlank(itemTemplateDTO.getUser())) {
+            lambdaQueryWrapper.and(i -> i
+                .eq(ItemTemplate::getStatus, Constants.FlowStateEnum.APPROVE.value())
+                .eq(ItemTemplate::getTenant, itemTemplateDTO.getTenant())
+                .or()
+                .eq(ItemTemplate::getCreateBy, itemTemplateDTO.getUser())
+                .in(ItemTemplate::getStatus, Constants.FlowStateEnum.DRAFT.value(), Constants.FlowStateEnum.SUBMIT.value()));
+        } else {
+            lambdaQueryWrapper
+                .likeRight(Objects.nonNull(itemTemplateDTO.getOrg()), ItemTemplate::getOrg, itemTemplateDTO.getOrg())
+                .eq(Objects.nonNull(itemTemplateDTO.getTenant()), ItemTemplate::getTenant, itemTemplateDTO.getTenant())
+                .eq(Objects.nonNull(itemTemplateDTO.getUser()), ItemTemplate::getCreateBy, itemTemplateDTO.getUser())
+                .in(!CollectionUtils.isEmpty(itemTemplateDTO.getStatusList()), ItemTemplate::getStatus, itemTemplateDTO.getStatusList());
+        }
+        log.info("SQL:{}", lambdaQueryWrapper.getTargetSql());
+        IPage<ItemTemplate> iPage = baseMapper.selectPage(page, lambdaQueryWrapper);
+        iPage.getRecords().forEach(n -> n.setUserName(map.get(n.getCreateBy())));
+
+        return PageResponse.of(iPage.getRecords(), (int) iPage.getTotal(), itemTemplateDTO.getCurrentPage(), itemTemplateDTO.getPageCount());
+    }
+
+    @Override
+    public SingleResponse<ItemTemplateDTO> queryById(Long id) {
+        ItemTemplateDTO itemTemplateDTO = new ItemTemplateDTO();
+        try {
+            ItemTemplate itemTemplate = this.getById(id);
+            if (itemTemplate == null) {
+                return SingleResponse.of(itemTemplateDTO);
+            }
+            if (itemTemplate.getItemConfigName() != null) {
+                InputStream stream = minioClient.getObject(
+                    GetObjectArgs.builder().bucket(ItemConstant.ITEM_FILE_JSON).object(itemTemplate.getItemConfigName()).build());
+                String itemJsonStr = new BufferedReader(new InputStreamReader(stream))
+                    .lines().collect(Collectors.joining(System.lineSeparator()));
+                itemTemplateDTO.setItemJsonStr(itemJsonStr);
+            }
+            itemTemplateDTO.setId(itemTemplate.getId());
+            itemTemplateDTO.setOriginId(itemTemplate.getOriginId());
+            itemTemplateDTO.setName(itemTemplate.getName());
+            itemTemplateDTO.setResolutionRatio(itemTemplate.getResolutionRatio());
+            itemTemplateDTO.setItemConfigName(itemTemplate.getItemConfigName());
+            itemTemplateDTO.setImg(itemTemplate.getImg());
+            itemTemplateDTO.setCreateBy(itemTemplate.getCreateBy());
+            itemTemplateDTO.setTenant(itemTemplate.getTenant());
+            itemTemplateDTO.setOrg(itemTemplate.getOrg());
+            itemTemplateDTO.setInfoType(itemTemplate.getInfoType());
+            itemTemplateDTO.setDuration(itemTemplate.getDuration());
+        } catch (Exception e) {
+            return SingleResponse.buildFailure(ComEnum.BODY_NOT_MATCH.getResultCode(), ComEnum.BODY_NOT_MATCH.getResultMsg());
+        }
+        return SingleResponse.of(itemTemplateDTO);
+    }
+
+    @Override
+    public SingleResponse saveItemTemplate(ItemTemplateDTO itemTemplateDTO) {
+        ItemTemplate itemTemplate = new ItemTemplate();
+        itemTemplate.setCreateBy(itemTemplateDTO.getCreateBy());
+        itemTemplate.setBuckets(ItemConstant.ITEM_FILE_JSON);
+        itemTemplate.setResolutionRatio(itemTemplateDTO.getResolutionRatio());
+        itemTemplate.setName(itemTemplateDTO.getName());
+        itemTemplate.setStatus(Constants.FlowStateEnum.SUBMIT.value());
+        itemTemplate.setOrg(itemTemplateDTO.getOrg());
+        itemTemplate.setTenant(itemTemplateDTO.getTenant());
+        itemTemplate.setInfoType(itemTemplateDTO.getInfoType());
+        itemTemplate.setImg(itemTemplateDTO.getImg());
+        itemTemplate.setItemConfigName(itemTemplateDTO.getItemConfigName());
+        itemTemplate.setResolutionRatio(itemTemplateDTO.getResolutionRatio());
+        itemTemplate.setName(itemTemplateDTO.getName());
+        itemTemplate.setDuration(itemTemplateDTO.getDuration());
+        itemTemplate.setOriginId(itemTemplateDTO.getOriginId());
+        baseMapper.insert(itemTemplate);
+        Long itemId = itemTemplate.getId();
+
+        return SingleResponse.of(itemId);
+    }
+
+    @Override
+    public SingleResponse deleteById(Long id) {
+        return null;
+    }
+
+
+}

+ 71 - 0
smsb-orchestration-manager/smsb-orchestration-manager-app/src/main/java/com/inspur/smsb/orchestration/service/workflow/WorkflowServiceImpl.java

@@ -215,6 +215,72 @@ public class WorkflowServiceImpl extends ServiceImpl<WorkflowMapper, Workflow> i
         this.baseMapper.updateById(workflow);
     }
 
+    public void reviewedAgreeV2(Long workflowNodeId, String userName) {
+        WorkflowNodeDto workflowNodeDto = workflowNodeService.selectById(workflowNodeId);
+        Objects.requireNonNull(workflowNodeDto, "不存在的节点id");
+        if (ObjectUtil.notEqual(workflowNodeDto.getStatus(), WorkflowStatusEnum.REVIEWEDING.getStatus())) {
+            throw new RuntimeException("当前节点为非待审核状态~");
+        }
+        workflowNodeDto.setReviewedTime(LocalDateTime.now());
+        workflowNodeDto.setStatus(WorkflowStatusEnum.AGREE.getStatus());
+        workflowNodeDto.setReviewedBy(userName);
+        workflowNodeService.updateById(workflowNodeDto);
+
+        // 审核同意后,生成下个待审核节点,并同步状态到主流程
+        Workflow workflow = this.baseMapper.selectById(workflowNodeDto.getWorkflowId());
+        Objects.requireNonNull(workflow, "不存在的流程数据");
+        // 当前审核节点
+        Integer severalReviewed = workflowNodeDto.getSeveralReviewed();
+        // 根据当前等级序号
+        String level = workflow.getFlowDesc().substring(0, 1);
+        // 1 2 等级只需要审核一次
+        if ("1".equals(level) || "2".equals(level)) {
+            // 生成完结节点
+            createEndNode(workflow.getId());
+            workflow.setCurrentSeveralReviewed(4);
+            workflow.setStatus(WorkflowStatusEnum.AGREE.getStatus());
+            // 调用钩子处理方法
+            getHandler(workflow.getType()).afterAgree(workflow);
+        } else if ("3".equals(level) || "4".equals(level)) {
+            if (ObjectUtil.equal(severalReviewed, 1)) {
+                // 生成下个待审核节点
+                WorkflowNodeDto nextNode = buildWorkflowNode(workflowNodeDto.getWorkflowId(), severalReviewed + 1);
+                workflowNodeService.save(nextNode);
+                workflow.setCurrentSeveralReviewed(severalReviewed + 1);
+                workflow.setStatus(WorkflowStatusEnum.REVIEWEDING.getStatus());
+            }else {
+                // 生成完结节点
+                createEndNode(workflow.getId());
+                workflow.setCurrentSeveralReviewed(4);
+                workflow.setStatus(WorkflowStatusEnum.AGREE.getStatus());
+                // 调用钩子处理方法
+                getHandler(workflow.getType()).afterAgree(workflow);
+            }
+        } else {
+            if (ObjectUtil.equal(severalReviewed, 3)) {
+                // 生成完结节点
+                createEndNode(workflow.getId());
+                workflow.setCurrentSeveralReviewed(4);
+                workflow.setStatus(WorkflowStatusEnum.AGREE.getStatus());
+                // 调用钩子处理方法
+                getHandler(workflow.getType()).afterAgree(workflow);
+            }else {
+                // 生成下个待审核节点
+                WorkflowNodeDto nextNode = buildWorkflowNode(workflowNodeDto.getWorkflowId(), severalReviewed + 1);
+                workflowNodeService.save(nextNode);
+                workflow.setCurrentSeveralReviewed(severalReviewed + 1);
+                workflow.setStatus(WorkflowStatusEnum.REVIEWEDING.getStatus());
+            }
+        }
+        workflow.setUpdateBy(userName);
+        this.baseMapper.updateById(workflow);
+    }
+
+    @Override
+    public void reviewedAgreeV2(Long workflowNodeId, String userName, Integer currentSeveralReviewed, String userId) {
+        this.reviewedAgreeV2(workflowNodeId, userName);
+    }
+
     // 创建流程结束节点
     private void createEndNode(Long workflowId) {
         WorkflowNodeDto node = new WorkflowNodeDto();
@@ -252,6 +318,11 @@ public class WorkflowServiceImpl extends ServiceImpl<WorkflowMapper, Workflow> i
         getHandler(workflow.getType()).afterReject(workflow);
     }
 
+    @Override
+    public void reviewedRefuseV2(Long workflowNodeId, String reason, String userName, Integer currentSeveralReviewed, String userId) {
+        this.reviewedRefuse(workflowNodeId, reason, userName);
+    }
+
     @Override
     public void endReviewed(Long workflowNodeId, String userName) {
         WorkflowNodeDto workflowNodeDto = workflowNodeService.selectById(workflowNodeId);

+ 50 - 0
smsb-orchestration-manager/smsb-orchestration-manager-client/src/main/java/com/inspur/smsb/orchestration/api/program/IItemTemplateService.java

@@ -0,0 +1,50 @@
+package com.inspur.smsb.orchestration.api.program;
+
+import com.alibaba.cola.dto.PageResponse;
+import com.alibaba.cola.dto.SingleResponse;
+import com.inspur.smsb.orchestration.dto.item.ItemDTO;
+import com.inspur.smsb.orchestration.dto.item.ItemTemplateDTO;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author lihao
+ * @date 2024-11-18
+ */
+public interface IItemTemplateService {
+
+    /**
+     * 分页查询节目模版
+     *
+     * @param itemTemplateDTO 查询实体
+     * @param map
+     * @return 返回符合条件的分页数据
+     */
+    PageResponse findListByPage(ItemTemplateDTO itemTemplateDTO, Map<String, String> map);
+
+    /**
+     * 根据节目模版ID查询节目
+     *
+     * @param id ID查询
+     * @return 返回一条符合条件得节目
+     */
+    SingleResponse<ItemTemplateDTO> queryById(Long id);
+
+    /**
+     * 新增节目模版
+     * @param itemTemplateDTO
+     * @return
+     */
+    SingleResponse saveItemTemplate(ItemTemplateDTO itemTemplateDTO);
+
+    /**
+     * 删除节目模版
+     * @param id
+     * @return
+     */
+    SingleResponse deleteById(Long id);
+}

+ 23 - 0
smsb-orchestration-manager/smsb-orchestration-manager-client/src/main/java/com/inspur/smsb/orchestration/api/workflow/WorkflowService.java

@@ -38,17 +38,40 @@ public interface WorkflowService {
 
     /**
      * 涉河同意
+     *
      * @param workflowNodeId
      */
     void reviewedAgree(Long workflowNodeId, String userName);
 
+    /**
+     * 审核同意v2
+     *
+     * @param workflowNodeId
+     * @param userName
+     * @param currentSeveralReviewed
+     * @param userId
+     */
+    void reviewedAgreeV2(Long workflowNodeId, String userName, Integer currentSeveralReviewed, String userId);
+
     /**
      * 审核拒绝
+     *
      * @param workflowNodeId
      * @param reason
      */
     void reviewedRefuse(Long workflowNodeId, String reason, String userName);
 
+    /**
+     * 审核拒绝v2
+     *
+     * @param workflowNodeId
+     * @param reason
+     * @param userId
+     * @param currentSeveralReviewed
+     * @param userName
+     */
+    void reviewedRefuseV2(Long workflowNodeId, String reason, String userName,Integer currentSeveralReviewed,String userId);
+
     /**
      * 终审
      * @param workflowNodeId

+ 139 - 0
smsb-orchestration-manager/smsb-orchestration-manager-client/src/main/java/com/inspur/smsb/orchestration/dto/item/ItemTemplateDTO.java

@@ -0,0 +1,139 @@
+package com.inspur.smsb.orchestration.dto.item;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author lihao
+ * @version 1.0
+ * @date 2024/11/18 14:30
+ */
+@Data
+public class ItemTemplateDTO implements Serializable {
+
+
+    private static final long serialVersionUID = -4968927268130430171L;
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    private Long originId;
+
+    /**
+     * 节目名称
+     */
+    private String name;
+
+    /**
+     * 分辨率
+     */
+    private String resolutionRatio;
+
+    /**
+     * 节目json
+     */
+    private String itemJsonStr;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 桶名
+     */
+    private String itemConfigName;
+
+    /**
+     * 图片base64
+     */
+    private String img;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 当前页
+     */
+    private Integer currentPage;
+    /**
+     * 要显示的页数
+     */
+    private Integer pageCount;
+    /**
+     * 节目时长
+     */
+    private Long duration;
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+    /**
+     * 租户
+     */
+    private String tenant;
+
+    /**
+     * 用户所属层级
+     */
+    private String org;
+
+    /**
+     * 所属个人
+     */
+    private String user;
+
+    /**
+     * 媒资名列表
+     */
+    private List<String> keyNameList;
+
+    /**
+     * 状态列表
+     */
+    private List<Integer> statusList;
+
+    /**
+     * 驳回媒资集合
+     */
+    private List<String> rejectIds;
+
+    /**
+     * 信息类型
+     */
+    private Integer infoType;
+
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 模版类型
+     * 1:村务公开
+     * 2:公益信息
+     * 3:广告
+     * 4:应急发布
+     * 5:政策宣传
+     * 6:政府通知
+     */
+    private Integer templateType;
+}

+ 143 - 0
smsb-orchestration-manager/smsb-orchestration-manager-infrastructure/src/main/java/com/inspur/smsb/orchestration/database/dataobject/program/ItemTemplate.java

@@ -0,0 +1,143 @@
+package com.inspur.smsb.orchestration.database.dataobject.program;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author lihao
+ * @since 2024-11-18
+ */
+@Data
+@TableName("item_template")
+public class ItemTemplate implements Serializable {
+
+
+    private static final long serialVersionUID = -6181270947109275742L;
+    /**
+     * 主键ID
+     */
+    @TableId
+    private Long id;
+
+    @TableField("origin_id")
+    private Long originId;
+
+    /**
+     * 节目名称
+     */
+    private String name;
+
+    /**
+     * 审核状态:1草稿2审核中、3审核通过4已发布5已下架
+     */
+    @TableField("`status`")
+    private Integer status;
+
+    /**
+     * 分辨率
+     */
+    @TableField("resolution_ratio")
+    private String resolutionRatio;
+
+    /**
+     * 节目json
+     */
+    @TableField("item_config_name")
+    private String itemConfigName;
+
+    /**
+     * 存储桶名
+     */
+    @TableField("`buckets`")
+    private String buckets;
+
+    /**
+     * 创建者
+     */
+    @TableField("create_by")
+    private String createBy;
+
+    /**
+     * 用户名称
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 逻辑删除  0未删除1删除
+     */
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 图片base64
+     */
+    private String img;
+
+    /**
+     * 节目时长
+     */
+    @TableField("`duration`")
+    private Long duration;
+
+    /**
+     * 租户
+     */
+    private String tenant;
+
+    /**
+     * 用户所属层级
+     */
+    private String org;
+
+    /**
+     * 备注
+     */
+    @TableField("`remark`")
+    private String remark;
+
+    /**
+     * 信息类型(1 商用 2 公益)
+     */
+    @TableField("info_type")
+    private Integer infoType;
+
+    /**
+     * 模版类型
+     * 1:村务公开
+     * 2:公益信息
+     * 3:广告
+     * 4:应急发布
+     * 5:政策宣传
+     * 6:政府通知
+     */
+    @TableField("template_type")
+    private Integer templateType;
+
+
+}

+ 18 - 0
smsb-orchestration-manager/smsb-orchestration-manager-infrastructure/src/main/java/com/inspur/smsb/orchestration/database/mapper/program/ItemTemplateMapper.java

@@ -0,0 +1,18 @@
+package com.inspur.smsb.orchestration.database.mapper.program;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.inspur.smsb.orchestration.database.dataobject.program.ItemTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author lihao
+ * @since 2024-11-18
+ */
+@Mapper
+public interface ItemTemplateMapper extends BaseMapper<ItemTemplate> {
+
+}

+ 4 - 1
smsb-orchestration-manager/smsb-orchestration-service-start/src/main/resources/bootstrap.yml

@@ -5,9 +5,12 @@ spring:
     active: dev
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:8848
+      server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
+      # password: nacos
       config:
         file-extension: yml
         refresh-enabled: true

+ 4 - 1
smsb-orchestration-manager/smsb-orchestration-web-start/src/main/resources/bootstrap.yml

@@ -9,9 +9,12 @@ spring:
     banner-mode: off
   cloud:
     nacos:
-      server-addr: 10.180.88.84:8060
+      # server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:8848
+      server-addr: 127.0.0.1:20009
       username: nacos
       password: inspur-nacos
+      # password: nacos
       config:
         file-extension: yml
         refresh-enabled: true

+ 9 - 7
smsb-oss-manager/smsb-oss-manage-consumer/src/main/resources/bootstrap.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: test
+    active: dev
   main:
     allow-bean-definition-overriding: true
     allow-circular-references: true
@@ -8,14 +8,16 @@ spring:
     name: smsb-oss-dubbo-consumer
   cloud:
     nacos:
-      discovery:
-        enabled: true
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
-      server-addr: 10.180.88.84:8060
+      # discovery:
+        # enabled: true
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+      # server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:20009
+      server-addr: 127.0.0.1:8848
       username: nacos
-      password: inspur-nacos
+      password: nacos
       config:
         file-extension: yml
         refresh-enabled: true
         group: ${spring.application.name}
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371

+ 11 - 7
smsb-oss-manager/smsb-oss-manage-provider/src/main/resources/bootstrap.yml

@@ -1,6 +1,7 @@
 spring:
   profiles:
-    active: test
+    #active: test
+    active: dev
   main:
     web-application-type: none
     allow-bean-definition-overriding: true
@@ -9,14 +10,17 @@ spring:
     name: smsb-oss-dubbo-provider
   cloud:
     nacos:
-      discovery:
-        enabled: true
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
-      server-addr: 10.180.88.84:8060
+      # discovery:
+        # enabled: true
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+      # server-addr: 192.168.2.120:8848
+      # server-addr: 127.0.0.1:20009
+      server-addr: 127.0.0.1:8848
       username: nacos
-      password: inspur-nacos
+      # password: inspur-nacos
+      password: nacos
       config:
         file-extension: yml
         refresh-enabled: true
         group: ${spring.application.name}
-        namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371
+        # namespace: 85f912fb-ca66-4a10-a3ec-95f7073b7371

+ 2 - 2
smsb-wechat-manager/smsb-wechat-manager-start-web/src/main/resources/bootstrap.yml

@@ -8,9 +8,9 @@ spring:
     name: smsb-wechat-web
   cloud:
     nacos:
-      server-addr: 127.0.0.1:8848
+      server-addr: 192.168.2.120:8848
       username: nacos
-      password: inspur-nacos
+      password: Hycpb@123
       config:
         file-extension: yml
         refresh-enabled: true