From 7069843ced21a3644fae850a1dd56a1240464356 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Fri, 23 Aug 2024 11:47:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?#=E7=BB=BC=E5=90=88=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/electric/vo/ComprehensiveElectricVo.java | 65 ++++++++++++ .../hnac/hzims/electric/vo/DeviceElectricVo.java | 2 +- .../com/hnac/hzims/electric/vo/TableHeadVo.java | 2 +- .../controller/ElectricReportController.java | 10 ++ .../electric/service/IElectricReportService.java | 5 + .../service/impl/ElectricReportServiceImpl.java | 114 ++++++++++++++++----- 6 files changed, 168 insertions(+), 30 deletions(-) create mode 100644 hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java new file mode 100644 index 0000000..6d4da72 --- /dev/null +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java @@ -0,0 +1,65 @@ +package com.hnac.hzims.electric.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * @author ysj + */ +@Data +public class ComprehensiveElectricVo { + + @ApiModelProperty(value = "月份") + private String month; + + @ApiModelProperty(value = "本月电量") + private Double monthGenerate; + + @ApiModelProperty(value = "去年同月") + private Double lastMonthGenerate; + + @ApiModelProperty(value = "月同比") + private Double lastMonthGenerateRate; + + @ApiModelProperty(value = "年发电量") + private Double yearGenerate; + + @ApiModelProperty(value = "去年同期") + private Double lastYearGenerate; + + @ApiModelProperty(value = "年同比") + private Double lastYearGenerateRate; + + + @ApiModelProperty(value = "本月降雨") + private Double monthRain; + + @ApiModelProperty(value = "去年同月") + private Double lastMonthRain; + + @ApiModelProperty(value = "月同比") + private Double lastMonthRainRate; + + @ApiModelProperty(value = "年降雨量") + private Double yearRain; + + @ApiModelProperty(value = "去年同期") + private Double lastYearRain; + + @ApiModelProperty(value = "年同比") + private Double lastYearRainRate; + + + @ApiModelProperty(value = "本月等效小时") + private Double monthEquivalent; + + @ApiModelProperty(value = "去年同月") + private Double lastMonthEquivalent; + + @ApiModelProperty(value = "年等效小时") + private Double yearEquivalent; + + @ApiModelProperty(value = "去年同期") + private Double lastYearEquivalent; +} \ No newline at end of file diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java index 9c1f934..a709db1 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java @@ -5,7 +5,7 @@ import lombok.Data; /** - * @author 表头 + * @author ysj */ @Data public class DeviceElectricVo { diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java index 2cfcb83..cddb9fa 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java @@ -7,7 +7,7 @@ import java.util.List; /** - * @author 表头 + * @author ysj */ @Data public class TableHeadVo { diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java index 361658b..8dde5c1 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java @@ -2,6 +2,7 @@ package com.hnac.hzims.electric.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.hnac.hzims.electric.service.IElectricReportService; +import com.hnac.hzims.electric.vo.ComprehensiveElectricVo; import com.hnac.hzims.equipment.entity.EmAssociationEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; /** @@ -35,4 +37,12 @@ public class ElectricReportController extends BladeController { @RequestParam(value = "time") String time) { return R.data(service.basics(deptId,type,time)); } + + @GetMapping("/comprehensive") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "综合报表", notes = "传入 deptId") + public R> comprehensive(@RequestParam(value = "deptId") Long deptId, + @RequestParam(value = "year") String year) { + return R.data(service.comprehensive(deptId,year)); + } } \ No newline at end of file diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java index a579675..24bc9a2 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java @@ -1,5 +1,8 @@ package com.hnac.hzims.electric.service; +import com.hnac.hzims.electric.vo.ComprehensiveElectricVo; + +import java.util.List; import java.util.Map; /** @@ -9,4 +12,6 @@ public interface IElectricReportService { Map basics(Long deptId, Long type,String time); + + List comprehensive(Long deptId,String year); } diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java index 2c7e061..59276ea 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java @@ -1,6 +1,9 @@ package com.hnac.hzims.electric.service.impl; +import cn.hutool.core.io.unit.DataUnit; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.common.logs.utils.StringUtils; import com.hnac.hzims.electric.entity.ThirtyEntity; @@ -8,17 +11,15 @@ import com.hnac.hzims.electric.entity.ThreeEntity; import com.hnac.hzims.electric.service.IElectricReportService; import com.hnac.hzims.electric.service.ThirtyService; import com.hnac.hzims.electric.service.ThreeService; +import com.hnac.hzims.electric.vo.ComprehensiveElectricVo; import com.hnac.hzims.electric.vo.DeviceElectricVo; import com.hnac.hzims.electric.vo.TableHeadVo; -import com.hnac.hzims.equipment.entity.EmInfoEntity; -import com.hnac.hzims.equipment.service.IEmInfoService; +import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.feign.IStationClient; -import com.hnac.hzims.operational.station.vo.StationsByDeptIdsParamVo; import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; import com.hnac.hzinfo.datasearch.analyse.po.AnalyseCodeByAnalyseDataPO; import com.hnac.hzinfo.datasearch.analyse.po.AnalyzeDataConditionPO; -import com.hnac.hzinfo.datasearch.analyse.vo.AnalyseDataTaosVO; import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeDataConditionVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,9 +27,9 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; -import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.entity.Dept; import org.springblade.system.feign.ISysClient; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -48,14 +49,16 @@ public class ElectricReportServiceImpl implements IElectricReportService { private final ThirtyService thirtyService; - private final IEmInfoService deviceService; - private final ISysClient sysClient; private final IStationClient stationClient; private final IAnalyseDataSearchClient analyseDataSearchClient; + private final RedisTemplate redisTemplate; + + public final static String DEVICE_CACHE_COFIG_FINAL = "hzims:equipment:emInfo:deviceCode.emInfoList"; + /** * 基础报表 * @param deptId @@ -92,6 +95,57 @@ public class ElectricReportServiceImpl implements IElectricReportService { } /** + * 综合报表 + * @param deptId + * @return + */ + @Override + public List comprehensive(Long deptId,String year) { + // 查询站点 + StationEntity param = new StationEntity(); + param.setRefDept(deptId); + R station = stationClient.getStationByCodeOrRedDept(param); + if(!station.isSuccess() || ObjectUtil.isEmpty(station.getData())){ + return new ArrayList<>(); + } + // 查询设备 + List devices = JSONObject.parseObject(redisTemplate.opsForValue().get(DEVICE_CACHE_COFIG_FINAL).toString(), new TypeReference>() {}); + if(CollectionUtil.isEmpty(devices)){ + return new ArrayList<>(); + } + // 设备装机容量 + double installedCapacity = devices.stream().filter(device->device.getCreateDept().equals(deptId)).mapToDouble(EminfoAndEmParamVo::getInstalledCapacity).sum(); + // 查询两年发电量 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(DateUtil.parse(year,"yyyy")); + calendar.add(Calendar.YEAR,1); + Date end = calendar.getTime(); + calendar.add(Calendar.YEAR,-2); + Date start = calendar.getTime(); + List threes = threeService.list(Wrappers.lambdaQuery() + .eq(ThreeEntity::getStationId,station.getData().getCode()) + .ge(ThreeEntity::getStrMonth, DateUtil.format(start,DateUtil.PATTERN_DATE)) + .le(ThreeEntity::getStrMonth, DateUtil.format(end,DateUtil.PATTERN_DATE)) + ); + + + calendar.setTime(DateUtil.parse(year,"yyyy")); + calendar.add(Calendar.YEAR,1); + Date finish = calendar.getTime(); + calendar.add(Calendar.YEAR,-1); + Date current = calendar.getTime(); + while (current.compareTo(finish) < 0){ + + + calendar.add(Calendar.MONTH,1); + current = calendar.getTime(); + } + + return null; + } + + + /** * 确认机构级别 * @param deptId * @return @@ -450,17 +504,17 @@ public class ElectricReportServiceImpl implements IElectricReportService { // 日 if (type == 0) { // 站点设备集合 - List devices = deviceService.list(Wrappers.lambdaQuery() - .eq(EmInfoEntity::getCreateDept,station.getData().getRefDept()) - .eq(EmInfoEntity::getEmType,2) - .eq(EmInfoEntity::getHomePageDisplay,1) - ); + List devices = JSONObject.parseObject(redisTemplate.opsForValue().get(DEVICE_CACHE_COFIG_FINAL).toString(), new TypeReference>() {}); if(CollectionUtil.isEmpty(devices)){ return new HashMap<>(); } + List stationDevices = devices.stream().filter(device->device.getCreateDept().equals(station.getData().getRefDept())).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(stationDevices)){ + return new HashMap<>(); + } Date date = DateUtil.parse(time,DateUtil.PATTERN_DATE); // 根据设备查询当日有功/无功电量 - List electrics = this.deviceElectrics(devices,date); + List electrics = this.deviceElectrics(stationDevices,date); // 表头 List tableHeads = new ArrayList<>(); @@ -475,7 +529,7 @@ public class ElectricReportServiceImpl implements IElectricReportService { tableHeads.add(secondHead); // 根据设备分组 - devices.forEach(device->{ + stationDevices.forEach(device->{ TableHeadVo tableHead = new TableHeadVo(); tableHead.setTableName(device.getName() + "发电量(kWh)"); tableHead.setIsChildren(true); @@ -486,24 +540,25 @@ public class ElectricReportServiceImpl implements IElectricReportService { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH,1); Date end = calendar.getTime(); - calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.DAY_OF_MONTH,-1); Date start = calendar.getTime(); List> tableDate = new ArrayList<>(); while (start.compareTo(end) < 0){ List item = new ArrayList<>(); String hours = DateUtil.format(start,"yyyy-MM-dd HH"); - item.add(start.getMonth() + 1 + "月"); + item.add(start.getHours() + "时"); // 总计:有功、无功 item.add(electrics.stream().filter(electric -> electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getGenerate).sum()); item.add(electrics.stream().filter(electric -> electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getReactiveGenerate).sum()); // 遍历机组 - devices.stream().sorted(Comparator.comparing(EmInfoEntity::getEmIndex)).forEach(device->{ - item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getNumber()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getGenerate).sum()); - item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getNumber()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getReactiveGenerate).sum()); + stationDevices.stream().sorted(Comparator.comparing(EminfoAndEmParamVo::getOrd)).forEach(device->{ + item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getEmCode()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getGenerate).sum()); + item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getEmCode()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getReactiveGenerate).sum()); }); - calendar.add(Calendar.DAY_OF_MONTH,1); + calendar.add(Calendar.HOUR_OF_DAY,1); start = calendar.getTime(); tableDate.add(item); } @@ -641,18 +696,19 @@ public class ElectricReportServiceImpl implements IElectricReportService { * @param devices * @return */ - private List deviceElectrics(List devices,Date date) { + private List deviceElectrics(List devices,Date date) { List electrics = new ArrayList<>(); devices.forEach(device->{ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH,1); Date endTime = calendar.getTime(); LocalDateTime end = LocalDateTime.parse(DateUtil.format(new Date(), DateUtil.format(endTime,DateUtil.PATTERN_DATETIME)), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME)); - calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.DAY_OF_MONTH,-1); Date startTime = calendar.getTime(); LocalDateTime start = LocalDateTime.parse(DateUtil.format(new Date(), DateUtil.format(startTime,DateUtil.PATTERN_DATETIME)), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME)); AnalyseCodeByAnalyseDataPO param = new AnalyseCodeByAnalyseDataPO(); - param.setDeviceCode(device.getNumber()); + param.setDeviceCode(device.getEmCode()); List conditions = new ArrayList<>(); // 有功电量 AnalyzeDataConditionPO generate = new AnalyzeDataConditionPO(); @@ -674,7 +730,8 @@ public class ElectricReportServiceImpl implements IElectricReportService { reactive.setSignages("reactive_generation"); reactive.setTimeInterval(1); reactive.setBeginTime(start); - reactive.setEndTime(end);conditions.add(reactive); + reactive.setEndTime(end); + conditions.add(reactive); param.setSignboardConditions(conditions); R> result = analyseDataSearchClient.getAnalyzeDataByAnalyzeCodeAndSignages(param); if(!result.isSuccess() || ObjectUtil.isEmpty(result.getData())){ @@ -682,24 +739,25 @@ public class ElectricReportServiceImpl implements IElectricReportService { } while (startTime.compareTo(endTime) < 0){ DeviceElectricVo electric = new DeviceElectricVo(); + electric.setDeviceCode(device.getEmCode()); electric.setStrTime(DateUtil.format(startTime,"yyyy-MM-dd HH")); electric.setTime(startTime.getHours()); - if(ObjectUtil.isEmpty(result.getData().get(0)) || CollectionUtil.isEmpty(result.getData().get(0).getList())){ + if(CollectionUtil.isNotEmpty(result.getData()) && ObjectUtil.isNotEmpty(result.getData().get(0)) && CollectionUtil.isNotEmpty(result.getData().get(0).getList())){ electric.setGenerate(result.getData().get(0).getList().stream().filter(o->o.getTs().contains(electric.getStrTime())).mapToDouble(val->{ if(StringUtils.isEmpty(val.getVal())){ return 0.0; } - return Double.parseDouble(val.getVal()); + return Double.parseDouble(val.getVal()) * device.getRideCount(); }).sum()); }else{ electric.setGenerate(0.0); } - if(ObjectUtil.isEmpty(result.getData().get(1)) || CollectionUtil.isEmpty(result.getData().get(1).getList())){ + if(CollectionUtil.isNotEmpty(result.getData()) && result.getData().size() > 1 && ObjectUtil.isNotEmpty(result.getData().get(1)) && CollectionUtil.isNotEmpty(result.getData().get(1).getList())){ electric.setReactiveGenerate(result.getData().get(1).getList().stream().filter(o->o.getTs().contains(electric.getStrTime())).mapToDouble(val->{ if(StringUtils.isEmpty(val.getVal())){ return 0.0; } - return Double.parseDouble(val.getVal()); + return Double.parseDouble(val.getVal()) * device.getRideCount(); }).sum()); }else{ electric.setReactiveGenerate(0.0); From ebcd55bbbeeabdcf775cb6f3a37e8255fcb2870a Mon Sep 17 00:00:00 2001 From: luyie Date: Fri, 23 Aug 2024 17:08:23 +0800 Subject: [PATCH 2/2] =?UTF-8?q?add:=E5=A4=A7=E6=A8=A1=E5=9E=8B=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=EF=BC=8C=E5=BC=82=E5=B8=B8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bigmodel/zhipuai/constants/ErrorCode.java | 57 ++++++++++++++++++++++ .../zhipuai/handler/ResultBooleanStrategy.java | 16 ++++-- .../zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java | 8 +-- .../service/impl/ZhipuAnalysisServiceImpl.java | 55 +++++++++++---------- 4 files changed, 100 insertions(+), 36 deletions(-) create mode 100644 hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java new file mode 100644 index 0000000..c6f5d74 --- /dev/null +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java @@ -0,0 +1,57 @@ +package com.hnac.hzims.bigmodel.zhipuai.constants; + +import com.hnac.hzinfo.exception.HzServiceException; +import lombok.Getter; +import org.springblade.core.tool.api.IResultCode; +import org.springblade.core.tool.api.ResultCode; + +/** + * @Author: ypj + * @Date: 2024/8/22 11:17 + */ +@Getter +public enum ErrorCode implements IResultCode { + + GET_DATA_FAILURE(1888000001, "获取数据失败"), + ANALYSIS_FAILURE(1888000002, "分析失败"), + STRATEGY_NOT_FOUND(1888000003, "策略未找到"), + GET_FILE_CONTENT_FAILURE(1888000004, "获取文件内容失败"), + REQUEST_TEXT_IS_EMPTY(1888000005, "交互文字内容不能为空"), + EMPTY_ANALYSIS_TYPE(1888000006, "识别类型为空"), + UNKNOWN_ANALYSIS_TYPE(1888000007, "未知的识别类型"), + NO_COMPARATOR(1888000008, "未获取到对比对象"), + NO_COMPARISON_TYPE(1888000009, "未获取到对比类型"), + GET_RESULT_FAIL(1888000010, "获取结果失败"),; + + private final int code; + private final String msg; + + ErrorCode(int code, String msg) { + this.code = code; + this.msg = msg; + } + + + @Override + public String getMessage() { + return this.msg; + } + + public HzServiceException throwException() { + return new HzServiceException(this); + } + + public static HzServiceException throwCommonException(String msg) { + return new HzServiceException(new IResultCode() { + @Override + public String getMessage() { + return msg; + } + + @Override + public int getCode() { + return ResultCode.FAILURE.getCode(); + } + }); + } +} diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java index e2a85bd..477c3a8 100644 --- a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java @@ -2,9 +2,9 @@ package com.hnac.hzims.bigmodel.zhipuai.handler; import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum; import com.hnac.hzims.bigmodel.zhipuai.constants.ComparisonType; +import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode; import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType; import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity; -import com.hnac.hzinfo.exception.HzServiceException; import org.springframework.util.Assert; import java.util.Objects; @@ -23,18 +23,24 @@ public class ResultBooleanStrategy implements ResultStrategy { public Boolean getResult(ZhipuAnalysisInfoEntity info, Object resultData) { Object comparator = convertOriginalData(info.getResultCondition(), info.getResultType()); Assert.isTrue(Objects.nonNull(comparator), () -> { - throw new HzServiceException("没有获取到对比对象"); + throw ErrorCode.NO_COMPARATOR.throwException(); }); ComparisonType comparisonType = BaseEnum.getInstance(info.getResultJudgeModel(), ComparisonType.class); - switch (comparisonType) { + Assert.isTrue(Objects.nonNull(comparisonType), () -> { + throw ErrorCode.NO_COMPARISON_TYPE.throwException(); + }); + switch (Objects.requireNonNull(comparisonType)) { case EQUAL: return comparator.equals(resultData); case GREATER: - return ((Comparable) comparator).compareTo(resultData) < 0; + if (comparator instanceof Comparable && resultData instanceof Comparable) { + return ((Comparable) comparator).compareTo((Comparable)resultData) < 0; + } + break; case LESS: return ((Comparable) comparator).compareTo(resultData) > 0; } - return null; + throw ErrorCode.GET_RESULT_FAIL.throwException(); } } diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java index 0f0925a..6e98f7b 100644 --- a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java @@ -1,6 +1,7 @@ package com.hnac.hzims.bigmodel.zhipuai.handler; import cn.hutool.core.lang.Assert; +import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode; import com.hnac.hzinfo.exception.HzServiceException; import com.zhipu.oapi.Constants; import com.zhipu.oapi.service.v4.model.ChatCompletionRequest; @@ -58,14 +59,13 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler { messages.add(chatMessage); String requestId = String.format(requestIdTemplate, System.currentTimeMillis()); - ChatCompletionRequest request = ChatCompletionRequest.builder() + return ChatCompletionRequest.builder() .model(getAnalysisModel()) .stream(Boolean.FALSE) .invokeMethod(Constants.invokeMethod) .messages(messages) .requestId(requestId) .build(); - return request; } @Override @@ -73,7 +73,7 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler { ModelApiResponse response = sendRequest(text, url); log.info("get zhi pu ai response : {}", Optional.ofNullable(response).map(JsonUtil::toJson).orElse("null")); Assert.isTrue(Objects.nonNull(response) && response.isSuccess(), () -> { - throw new HzServiceException(response.getMsg()); + throw ErrorCode.throwCommonException(Optional.ofNullable(response).map(ModelApiResponse::getMsg).orElse("没有收到大模型平台响应")); }); try { String resultJson = response.getData().getChoices().get(0).getMessage().getContent().toString(); @@ -81,7 +81,7 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler { return resultJson; } catch (Exception e) { log.info("get data from response error", e); - throw new HzServiceException("获取数据失败"); + throw ErrorCode.GET_DATA_FAILURE.throwException(); } } diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java index d3b9a78..0afde6f 100644 --- a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisRequestDTO; import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisResponseDTO; import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum; +import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode; import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType; import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity; import com.hnac.hzims.bigmodel.zhipuai.handler.ResultStrategy; @@ -41,29 +42,29 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { private final ZhipuAnalysisInfoService infoService; - private final String multiQuestionBrief = "从给出的图片回答以下{}个问题\n"; + private static final String MULTI_QUESTION_BRIEF = "从给出的图片回答以下{}个问题\n"; - private final String multiQuestionPrefix = "第{}个问题,"; + private static final String MULTI_QUESTION_PREFIX = "第{}个问题,"; - private final String multiQuestionConstrains = "- 不要在输出中添加任何注释和思考过程和其他多余的内容,以JSON格式输出简单结果,{}结果只包含'是'或者'否'\n"; + private static final String MULTI_QUESTION_CONSTRAINS = "- 不要在输出中添加任何注释和思考过程和其他多余的内容,以JSON格式输出简单结果,{}结果只包含'是'或者'否'\n"; - private final String multiQuestionConstrainsList = "'{}'代表第{}个问题,"; + private static final String MULTI_QUESTION_CONSTRAINS_LIST = "'{}'代表第{}个问题,"; @Override public ZhipuAnalysisFileResponse analysis(ZhipuAnalysisFileRequest request) { Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()) || StringUtil.isNotBlank(request.getUrl()), () -> { - throw new HzServiceException("文件为空"); + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); }); ZhipuAnalysisFileResponse response = new ZhipuAnalysisFileResponse(); ZhipuAnalysisInfoEntity info = getAnalysisInfo(request); Assert.isTrue(Objects.nonNull(info), () -> { - throw new HzServiceException("没有找到对应的策略信息"); + throw ErrorCode.STRATEGY_NOT_FOUND.throwException(); }); ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(info.getModel()); Assert.isTrue(StringUtil.isNotBlank(info.getRequestContent()), () -> { - throw new HzServiceException("智谱平台交互内容为空"); + throw ErrorCode.REQUEST_TEXT_IS_EMPTY.throwException(); }); //拼接文字内容 StringBuilder textBuilder = new StringBuilder(); @@ -78,13 +79,13 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { Object resultObject = analyser.getResultValue(analyser.getText(), info.getResultKey(), getSendUrl(request)); Assert.isTrue(Objects.nonNull(resultObject), () -> { - throw new HzServiceException("智谱平台分析失败"); + throw ErrorCode.ANALYSIS_FAILURE.throwException(); }); String resultStr = resultObject.toString(); ResultStrategyType strategyType = BaseEnum.getInstance(info.getResultStrategy(), ResultStrategyType.class); Assert.isTrue(Objects.nonNull(strategyType), () -> { - throw new HzServiceException("没有找到对应的结果数据解析策略"); + throw ErrorCode.STRATEGY_NOT_FOUND.throwException(); }); ResultStrategy strategy = strategyType.getStrategy(); @@ -100,14 +101,14 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { if (StringUtil.isNotBlank(request.getUrl())) { return request.getUrl(); } - if (StringUtil.isNotBlank(request.getFilePath())) { - try { - return FileUtil.getBase64(request.getFilePath()); - } catch (IOException e) { - throw new HzServiceException("获取文件内容失败"); - } + Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()), () -> { + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); + }); + try { + return FileUtil.getBase64(request.getFilePath()); + } catch (IOException e) { + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); } - return null; } @Override @@ -121,7 +122,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { .eq(StringUtil.isNotBlank(request.getCheckTypeSon()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSon()) .last("limit 1;")); } - log.info("the analysis information is {}", Optional.ofNullable(result).map(r -> JsonUtil.toJson(r)).orElse("null")); + log.debug("the analysis information is {}", Optional.ofNullable(result).map(r -> JsonUtil.toJson(r)).orElse("null")); return result; } @@ -131,15 +132,15 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { BigModelAnalysisResponseDTO response = new BigModelAnalysisResponseDTO(); try { Assert.isTrue(StringUtil.isNotBlank(request.getUrl()), () -> { - throw new HzServiceException("文件为空"); + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); }); Assert.isTrue(CollectionUtil.isNotEmpty(request.getCodeList()) || CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), () -> { - throw new HzServiceException("识别类型为空"); + throw ErrorCode.EMPTY_ANALYSIS_TYPE.throwException(); }); List infoList = infoService.list(Wrappers.lambdaQuery().in(CollectionUtil.isNotEmpty(request.getCodeList()), ZhipuAnalysisInfoEntity::getCode, request.getCodeList()) .in(CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSonList())); Assert.isTrue(CollectionUtil.isNotEmpty(infoList), () -> { - throw new HzServiceException("未知的识别类型"); + throw ErrorCode.UNKNOWN_ANALYSIS_TYPE.throwException(); }); ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(infoList.get(0).getModel()); @@ -148,7 +149,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { if (null == resultMap) { response.setCode(ResultCode.FAILURE.getCode()); - response.setMsg("智谱大模型分析失败"); + response.setMsg(ErrorCode.ANALYSIS_FAILURE.getMsg()); return response; } @@ -184,9 +185,9 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { response.setMsg(e.getMessage()); } else { response.setCode(ResultCode.FAILURE.getCode()); - response.setMsg("智谱大模型分析失败"); + response.setMsg(ErrorCode.ANALYSIS_FAILURE.getMsg()); } - log.error("智谱大模型分析失败", e); + log.error(ErrorCode.ANALYSIS_FAILURE.getMessage(), e); } return response; } @@ -196,18 +197,18 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { StringBuilder titleBuilder = new StringBuilder(); StringBuilder formatBuilder = new StringBuilder(); stringBuilder.append(ZhipuAnalyser.QUESTION_PROFILE) - .append(StringUtil.format(multiQuestionBrief, infoList.size())); + .append(StringUtil.format(MULTI_QUESTION_BRIEF, infoList.size())); formatBuilder.append("{"); for (int index = 1; index <= infoList.size(); index++) { ZhipuAnalysisInfoEntity infoEntity = infoList.get(index - 1); - stringBuilder.append(StringUtil.format(multiQuestionPrefix, index)); - titleBuilder.append(StringUtil.format(multiQuestionConstrainsList, infoEntity.getResultKey(), index)); + stringBuilder.append(StringUtil.format(MULTI_QUESTION_PREFIX, index)); + titleBuilder.append(StringUtil.format(MULTI_QUESTION_CONSTRAINS_LIST, infoEntity.getResultKey(), index)); formatBuilder.append(infoEntity.getRequestOutputFormat()).append(","); } formatBuilder.deleteCharAt(formatBuilder.length() - 1); formatBuilder.append("}"); stringBuilder.append(ZhipuAnalyser.QUESTION_CONSTRAINS) - .append(StringUtil.format(multiQuestionConstrains, titleBuilder.toString())) + .append(StringUtil.format(MULTI_QUESTION_CONSTRAINS, titleBuilder.toString())) .append(ZhipuAnalyser.QUESTION_OUTPUT_FORMAT).append(formatBuilder); return stringBuilder.toString(); }