yang_shj
6 months ago
23 changed files with 481 additions and 46 deletions
@ -0,0 +1,36 @@
|
||||
package com.hnac.hzims.bigmodel.interactive.constants; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
import java.util.Arrays; |
||||
|
||||
/** |
||||
* @Author: huangxing |
||||
* @Date: 2024/05/29 08:31 |
||||
*/ |
||||
@AllArgsConstructor |
||||
public enum DataMethodEnum { |
||||
USUAL("详情",6,"详情"), |
||||
EARLIEST("最早值",0,"最早值"), |
||||
MAX("最大值",1,"最大值"), |
||||
MIN("最小值",2,"最小值"), |
||||
AVERAGE("平均值",3,"平均值"), |
||||
SUM("累计值/和值",4,"总和值"), |
||||
DIFFERENCE("变化值/差值",5,"变化值"), |
||||
LATEST("最新值",6,"最新值"), |
||||
; |
||||
@Getter |
||||
private String name; |
||||
@Getter |
||||
private Integer accessRule; |
||||
@Getter |
||||
private String method; |
||||
|
||||
public static DataMethodEnum getEnumByMethod(String method) { |
||||
return Arrays.stream(DataMethodEnum.class.getEnumConstants()) |
||||
.filter(e -> e.getMethod().equals(method)) |
||||
.findFirst().orElse(null); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,40 @@
|
||||
package com.hnac.hzims.bigmodel.interactive.constants; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
import java.util.Arrays; |
||||
|
||||
/** |
||||
* @Author: huangxing |
||||
* @Date: 2024/05/28 11:37 |
||||
*/ |
||||
@AllArgsConstructor |
||||
public enum DateEnum { |
||||
YEAR("year","每年","按年",5,6), |
||||
MONTH("month","每月","按月",4,5), |
||||
DAY("day","每天","按天",3,3), |
||||
HOUR("hour","每小时","按小时",2,2), |
||||
MINUTE("minute","每分钟","按分钟",1,1), |
||||
SECOND("second","每秒","按秒",0,0), |
||||
; |
||||
@Getter |
||||
private String code; |
||||
@Getter |
||||
private String name; |
||||
@Getter |
||||
private String dateType; |
||||
@Getter |
||||
private int order; |
||||
@Getter |
||||
private Integer saveTimeType; |
||||
|
||||
public static DateEnum getDateEnumByType(String dateType) { |
||||
return Arrays.stream(DateEnum.class.getEnumConstants()).filter(d -> d.getDateType().equals(dateType)).findFirst().orElse(null); |
||||
} |
||||
|
||||
public static DateEnum getDateEnumByOrder(int order) { |
||||
return Arrays.stream(DateEnum.class.getEnumConstants()).filter(d -> d.getOrder() == order).findFirst().orElse(null); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,34 @@
|
||||
package com.hnac.hzims.bigmodel.interactive.controller; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||
import com.hnac.hzims.bigmodel.interactive.service.IAnalyseDataService; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.HistoryDataSearchVO; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.validation.annotation.Validated; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* @Author: huangxing |
||||
* @Date: 2024/05/29 09:22 |
||||
*/ |
||||
@RequestMapping("/analyse/data") |
||||
@AllArgsConstructor |
||||
@Api(value = "数据查询管理",tags = "数据查询管理") |
||||
@RestController |
||||
public class AnalyseDataController { |
||||
|
||||
private final IAnalyseDataService analyseDataService; |
||||
|
||||
@GetMapping("/getHistoryData") |
||||
@ApiOperation("获取历史数据") |
||||
@ApiOperationSupport(order = 1) |
||||
public R getHistoryData(@Validated HistoryDataSearchVO searchVO) { |
||||
return R.data(analyseDataService.getHistoryData(searchVO)); |
||||
} |
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.hnac.hzims.bigmodel.interactive.service; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.AnswerVO; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.ExtraVO; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.HistoryDataSearchVO; |
||||
|
||||
/** |
||||
* @Author: huangxing |
||||
* @Date: 2024/05/28 11:29 |
||||
*/ |
||||
public interface IAnalyseDataService { |
||||
|
||||
ExtraVO getHistoryData(HistoryDataSearchVO searchVO); |
||||
|
||||
} |
@ -0,0 +1,150 @@
|
||||
package com.hnac.hzims.bigmodel.interactive.service.impl; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.google.common.collect.Lists; |
||||
import com.hnac.hzims.bigmodel.interactive.constants.DataMethodEnum; |
||||
import com.hnac.hzims.bigmodel.interactive.constants.DateEnum; |
||||
import com.hnac.hzims.bigmodel.interactive.constants.FuncRouteEnum; |
||||
import com.hnac.hzims.bigmodel.interactive.constants.FunctionConstants; |
||||
import com.hnac.hzims.bigmodel.interactive.service.IAnalyseDataService; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.AnswerVO; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.ExtraVO; |
||||
import com.hnac.hzims.bigmodel.interactive.vo.HistoryDataSearchVO; |
||||
import com.hnac.hzinfo.sdk.core.response.Result; |
||||
import com.hnac.hzinfo.sdk.v5.device.DeviceDataClient; |
||||
import com.hnac.hzinfo.sdk.v5.device.dto.ReductionAttrDataDTO; |
||||
import com.hnac.hzinfo.sdk.v5.device.dto.ReductionDataDTO; |
||||
import com.hnac.hzinfo.sdk.v5.device.vo.ReductionDataVO; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.log.exception.ServiceException; |
||||
import org.springblade.core.log.logger.BladeLogger; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springblade.core.tool.utils.Func; |
||||
import org.springblade.core.tool.utils.StringUtil; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.util.Assert; |
||||
|
||||
import java.time.Duration; |
||||
import java.time.LocalDateTime; |
||||
import java.time.Period; |
||||
import java.time.temporal.ChronoUnit; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @Author: huangxing |
||||
* @Date: 2024/05/28 11:29 |
||||
*/ |
||||
@Service |
||||
@AllArgsConstructor |
||||
public class AnalyseDataServiceImpl implements IAnalyseDataService { |
||||
|
||||
private final DeviceDataClient deviceDataClient; |
||||
private final BladeLogger logger; |
||||
public static final int DATA_COUNT_MAX = 8000; |
||||
|
||||
@Override |
||||
public ExtraVO getHistoryData(HistoryDataSearchVO searchVO) { |
||||
if(Func.isEmpty(searchVO.getDataType()) || StringUtil.isBlank(searchVO.getDataType()) |
||||
|| DataMethodEnum.USUAL.getMethod().equals(searchVO.getMethod())) { |
||||
searchVO.setDataType(DateEnum.SECOND.getDateType()); |
||||
} |
||||
// 聚合数据方式处理
|
||||
DateEnum dateEnum = DateEnum.getDateEnumByType(searchVO.getDataType()); |
||||
searchVO.setDataType(dateEnum.getDateType()); |
||||
// 获取最适配时间段
|
||||
DateEnum adapterDate = this.getDateEnumByDuration(searchVO.getStartTime(), searchVO.getEndTime(), dateEnum); |
||||
String note = adapterDate.getDateType().equals(searchVO.getDataType()) ? "" : "(由于数据量过大,只能帮您" + adapterDate.getDateType() + "查询)"; |
||||
searchVO.setDataType(adapterDate.getDateType()); |
||||
ExtraVO extraVO = new ExtraVO(); |
||||
extraVO.setType(FuncRouteEnum.HISTORY_DATA.getType().getType()); |
||||
extraVO.setFuncCode(FuncRouteEnum.HISTORY_DATA.getFuncCode()); |
||||
Map<String,Object> params = new HashMap<>(1); |
||||
ReductionDataVO dataVO = this.getPolymerizationData(searchVO); |
||||
List<Map> datalist = dataVO.getDataList().stream().map(m -> { |
||||
m.put("val", m.get(searchVO.getSignage())); |
||||
m.remove(searchVO.getSignage()); |
||||
return m; |
||||
}).collect(Collectors.toList()); |
||||
DataMethodEnum enumByMethod = DataMethodEnum.getEnumByMethod(searchVO.getMethod()); |
||||
String label = searchVO.getStationName() + "_" |
||||
+ searchVO.getDeviceName() + "_" |
||||
+ dataVO.getFieldMap().get(searchVO.getSignage()) + "_" |
||||
+ adapterDate.getName() |
||||
+ enumByMethod.getMethod() |
||||
+ note |
||||
+ ":"; |
||||
extraVO.setLabel(label); |
||||
params.put("data",datalist); |
||||
params.put("deviceName",searchVO.getDeviceName()); |
||||
params.put("attrName",dataVO.getFieldMap().get(searchVO.getSignage())); |
||||
params.put("stationName",searchVO.getStationName()); |
||||
extraVO.setParams(params); |
||||
return extraVO; |
||||
} |
||||
|
||||
private ReductionDataVO getPolymerizationData(HistoryDataSearchVO searchVO) { |
||||
DataMethodEnum enumByMethod = DataMethodEnum.getEnumByMethod(searchVO.getMethod()); |
||||
Assert.isTrue(Func.isNotEmpty(enumByMethod),() -> { |
||||
throw new ServiceException("数据查询聚合方式传参有误,查询失败!"); |
||||
}); |
||||
// 聚合数据方式处理
|
||||
DateEnum dateEnum = DateEnum.getDateEnumByType(searchVO.getDataType()); |
||||
ReductionDataDTO dataDTO = new ReductionDataDTO(); |
||||
ReductionAttrDataDTO reductionAttrData = new ReductionAttrDataDTO(); |
||||
reductionAttrData.setSignage(searchVO.getSignage()); |
||||
reductionAttrData.setAccessRules(enumByMethod.getAccessRule()); |
||||
reductionAttrData.setKeepFigures(2); |
||||
dataDTO.setBeginTime(LocalDateTime.parse(searchVO.getStartTime(),DateUtil.DATETIME_FORMATTER)); |
||||
dataDTO.setEndTime(LocalDateTime.parse(searchVO.getEndTime(),DateUtil.DATETIME_FORMATTER)); |
||||
dataDTO.setDeviceCode(searchVO.getDeviceCode()); |
||||
dataDTO.setNeedPage(false); |
||||
dataDTO.setSaveTimeType(dateEnum.getSaveTimeType()); |
||||
dataDTO.setTimeInterval(1); |
||||
dataDTO.setDtos(Lists.newArrayList(reductionAttrData)); |
||||
logger.info("interactive:getPolymerizationData","config传参为:" + JSON.toJSONString(dataDTO)); |
||||
Result<ReductionDataVO> dataVO = deviceDataClient.pageDeviceCodeAndSignages(dataDTO); |
||||
Assert.isTrue(dataVO.isSuccess(),() -> { |
||||
throw new ServiceException("聚合历史数据查询失败!"); |
||||
}); |
||||
return dataVO.getData(); |
||||
} |
||||
|
||||
private DateEnum getDateEnumByDuration(String startTime,String endTime,DateEnum dateEnum) { |
||||
LocalDateTime start = LocalDateTime.parse(startTime, DateUtil.DATETIME_FORMATTER); |
||||
LocalDateTime end = LocalDateTime.parse(endTime, DateUtil.DATETIME_FORMATTER); |
||||
Duration duration = Duration.between(start, end); |
||||
int count; |
||||
switch(dateEnum) { |
||||
case YEAR: |
||||
count = Long.valueOf(ChronoUnit.YEARS.between(start.toLocalDate(), end.toLocalDate())).intValue(); |
||||
break; |
||||
case MONTH: |
||||
count = Long.valueOf(ChronoUnit.MONTHS.between(start.toLocalDate(), end.toLocalDate())).intValue(); |
||||
break; |
||||
case DAY: |
||||
count = Long.valueOf(ChronoUnit.DAYS.between(start.toLocalDate(), end.toLocalDate())).intValue(); |
||||
break; |
||||
case HOUR: |
||||
count = Long.valueOf(duration.toHours()).intValue(); |
||||
break; |
||||
case MINUTE: |
||||
count = Long.valueOf(duration.toMinutes()).intValue(); |
||||
break; |
||||
case SECOND: |
||||
count = Long.valueOf(duration.getSeconds()).intValue(); |
||||
break; |
||||
default: |
||||
throw new ServiceException("未找到相关时间类型,查询失败!"); |
||||
} |
||||
if(count <= DATA_COUNT_MAX) { |
||||
return dateEnum; |
||||
} |
||||
else { |
||||
return getDateEnumByDuration(startTime, endTime, DateEnum.getDateEnumByOrder(dateEnum.getOrder() + 1)); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
package com.hnac.hzims.bigmodel.interactive.vo; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotBlank; |
||||
|
||||
/** |
||||
* @Author: huangxing |
||||
* @Date: 2024/05/28 11:48 |
||||
*/ |
||||
@Data |
||||
public class HistoryDataSearchVO { |
||||
|
||||
@NotBlank |
||||
private String startTime; |
||||
|
||||
@NotBlank |
||||
private String endTime; |
||||
|
||||
@NotBlank |
||||
private String deviceCode; |
||||
|
||||
@NotBlank |
||||
private String signage; |
||||
|
||||
@NotBlank |
||||
private String method; |
||||
|
||||
private String dataType; |
||||
|
||||
private String stationName; |
||||
|
||||
private String deviceName; |
||||
|
||||
} |
@ -0,0 +1,72 @@
|
||||
package com.hnac.hzims.middle.processflow.strategy.serviceimpl; |
||||
|
||||
import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.middle.processflow.service.ProcessDictService; |
||||
import com.hnac.hzims.middle.processflow.strategy.abstracts.ProcessAbstractService; |
||||
import com.hnac.hzims.middle.processflow.strategy.entity.WorkflowQueue; |
||||
import com.hnac.hzims.ticket.ticketprocess.feign.OperationTicketFeignClient; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.log.exception.ServiceException; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import static com.hnac.hzims.middle.process.constant.TicketProcessConstant.OFFLINE_OPERATION_TICKET; |
||||
|
||||
|
||||
/** |
||||
* 操作票流程实现类 |
||||
* |
||||
* @Author dfy |
||||
* @Version v1.0 |
||||
* @Serial 1.0 |
||||
* @Date 2023/3/28 8:47 |
||||
*/ |
||||
@Slf4j |
||||
@Service |
||||
@RequiredArgsConstructor |
||||
public class OfflineOperationTicketProcessServiceImpl extends ProcessAbstractService { |
||||
|
||||
|
||||
|
||||
private final OperationTicketFeignClient operationTicketFeignClient; |
||||
|
||||
|
||||
|
||||
private final ProcessDictService processDictService; |
||||
|
||||
|
||||
|
||||
/** |
||||
* 设置执行那种实现类 |
||||
* |
||||
* @param flowQueue |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public Boolean isWorkflowProcess(WorkflowQueue flowQueue) { |
||||
log.info("是否执行操作票流程环节操作~~~~,流程flowQueue: {}", flowQueue); |
||||
String dictValue = processDictService.selectDictValueByKey(OFFLINE_OPERATION_TICKET); |
||||
if (dictValue.equals(flowQueue.getProcessDefinitionKey())) { |
||||
log.info("已执行操作票流程环节操作~~~~"); |
||||
return true; |
||||
} |
||||
log.error("未执行操作票流程环节操作,请联系管理员~~~~"); |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 两票管理业务方法 |
||||
* |
||||
* @param response |
||||
*/ |
||||
@Override |
||||
public void calculate(ProcessWorkFlowResponse response) { |
||||
log.info("操作票流程消费调用fein接口开始---param",response); |
||||
Boolean pending = operationTicketFeignClient.findPending(response); |
||||
if (!pending) { |
||||
log.info("操作票流程调用fein接口异常---param",response); |
||||
throw new ServiceException("操作票流程出现异常呢"); |
||||
} |
||||
log.info("操作票流程消费调用fein接口结束---param",response); |
||||
} |
||||
} |
@ -0,0 +1 @@
|
||||
INSERT INTO `process_dict`(`dict_code`, `dict_sort`, `dict_key`, `dict_value`, `dict_label`, `dict_type`, `is_default`, `status`, `create_dept`, `create_time`, `update_time`, `remark`) VALUES (15, 15, 'OperationTicketOffline', 'OperationTicketOffline', '线下操作票', '线下操作票', 'Y', 0, NULL, '2023-07-25 18:35:01', '2024-05-24 11:22:14', '线下操作票流程'); |
@ -0,0 +1,6 @@
|
||||
alter table `hzims_standard_ticket_info` add column `is_offline` tinyint(2) default 0 comment '是否线下 : 1-线下,0-线上'; |
||||
alter table `hzims_standard_ticket_info` add column `is_approved` tinyint(2) default NULL comment '是否审核通过 : 1-通过,0-未通过'; |
||||
alter table `hzims_standard_ticket_info` ADD COLUMN `picture` varchar(600) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片附件' ; |
||||
ALTER TABLE `hzims_standard_ticket_info` |
||||
MODIFY COLUMN `issue_order_person` bigint(20) NULL COMMENT '发令人' AFTER `code`, |
||||
MODIFY COLUMN `access_order_person` bigint(20) NULL COMMENT '受令人' AFTER `issue_order_person`; |
Loading…
Reference in new issue