吴远 3 months ago
parent
commit
f8d9379655
  1. 5
      dk-api/api-bom/pom.xml
  2. 5
      dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java
  3. 2
      dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java
  4. 6
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java
  5. 22
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java
  6. 6
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  7. 4
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java
  8. 6
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  9. 14
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java
  10. 31
      dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java
  11. 4
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  12. 3
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java
  13. 5
      dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java
  14. 4
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  15. 5
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  16. 6
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java
  17. 2
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessTaskService.java
  18. 30
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  19. 142
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  20. 3
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java
  21. 102
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  22. 4
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  23. 7
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  24. 34
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java
  25. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java
  26. 8
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java
  27. 46
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  28. 2
      dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java
  29. 6
      dk-modules/system/src/main/java/org/dromara/system/domain/AiLabel.java
  30. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelBo.java
  31. 2
      dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelPostBindBo.java
  32. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/vo/AiLabelVo.java
  33. 13
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java
  34. 6
      dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java
  35. 46
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java
  36. 48
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java
  37. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/vo/FlowDefinitionVo.java
  38. 11
      dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java
  39. 6
      dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java
  40. 16
      dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java
  41. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java
  42. 15
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java
  43. 11
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java
  44. 3
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java
  45. 13
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java
  46. 16
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java
  47. 49
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java
  48. 3
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
  49. 22
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
  50. 4
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml
  51. 22
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml
  52. 20
      pom.xml

5
dk-api/api-bom/pom.xml

@ -46,6 +46,11 @@
<artifactId>api-business</artifactId> <artifactId>api-business</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-sample</artifactId>
<version>${revision}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

5
dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java

@ -13,7 +13,10 @@ import java.util.List;
*/ */
public interface RemoteBusinessAlertService { public interface RemoteBusinessAlertService {
/**
* 生成预警待验证状态
*/
Boolean saveBusinessAlert(List<RemoteBusinessAlertVo> alertVoList);
/** /**
* 更新此条预警审批时候的状态 * 更新此条预警审批时候的状态
* @param businessId 业务id(预警工单) * @param businessId 业务id(预警工单)

2
dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java

@ -18,7 +18,7 @@ public class RemoteBusinessAlertVo implements Serializable {
/** /**
* *
*/ */
private String id; private Long id;
/** /**
* job任务id * job任务id

6
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java

@ -1,15 +1,13 @@
package org.dromara.workflow.api; package org.dromara.workflow.api;
import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.domain.FlowDepartVo; import org.dromara.workflow.api.domain.FlowLabelVo;
import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture;
/** /**
* 通用 工作流服务 * 通用 工作流服务
@ -128,6 +126,6 @@ public interface RemoteWorkflowService {
*/ */
List<RemoteUserVo> currentTaskAllUser(Long taskId); List<RemoteUserVo> currentTaskAllUser(Long taskId);
FlowDepartVo getFlowDepart(Long deptId); String getFlowCode(String postCode);
} }

22
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java

@ -1,22 +0,0 @@
package org.dromara.workflow.api.domain;
import lombok.Data;
@Data
public class FlowDepartVo {
private Long id;
/**
* 流程类型
*/
private String flowType;
/**
* 流程编码
*/
private String flowCode;
}

6
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java

@ -34,11 +34,11 @@ public class BusinessAlertStatisticsController extends BaseController {
@Operation(summary="panel看板数据", description="panel看板数据") @Operation(summary="panel看板数据", description="panel看板数据")
@GetMapping(value = "/panel/count") @GetMapping(value = "/panel/count")
public R<List<StatObj>> countPanelAlert(BusinessAlertBo businessAlertBo) { public R<StatObj> countPanelAlert(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countPanelAlert(businessAlertBo)); return R.ok(statisticsService.countPanelAlert(businessAlertBo));
} }
/** /**`
* 总体情况看板 * 总体情况看板
* @param businessAlertBo * @param businessAlertBo
* @return * @return
@ -68,7 +68,7 @@ public class BusinessAlertStatisticsController extends BaseController {
*/ */
@Operation(summary="各局今日预警数", description="各局今日预警数") @Operation(summary="各局今日预警数", description="各局今日预警数")
@GetMapping(value = "/post/day/count") @GetMapping(value = "/post/day/count")
public R<Map<String,Object>> countPostDayAlert(BusinessAlertBo businessAlertBo) { public R<List<StatObj>> countPostDayAlert(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countPostDayAlert(businessAlertBo)); return R.ok(statisticsService.countPostDayAlert(businessAlertBo));
} }

4
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java

@ -106,4 +106,8 @@ public class BusinessTaskController extends BaseController {
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(businessTaskService.deleteWithValidByIds(List.of(ids), true)); return toAjax(businessTaskService.deleteWithValidByIds(List.of(ids), true));
} }
} }

6
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -29,7 +29,7 @@ public class BusinessAlert extends BaseEntity {
/** /**
* *
*/ */
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.AUTO)
private Long id; private Long id;
/** /**
@ -65,12 +65,12 @@ public class BusinessAlert extends BaseEntity {
/** /**
* 纬度 * 纬度
*/ */
private Long lat; private String lat;
/** /**
* 精度 * 精度
*/ */
private Long lng; private String lng;
/** /**
* 标签名- * 标签名-

14
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java

@ -42,16 +42,6 @@ public class BusinessAlertBo {
private String images; private String images;
/**
* 纬度
*/
private Long lat;
/**
* 精度
*/
private Long lng;
/** /**
* 预警类型 * 预警类型
*/ */
@ -245,4 +235,8 @@ public class BusinessAlertBo {
*/ */
private Integer dateType; private Integer dateType;
private String startTime;
private String endTime;
} }

31
dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java

@ -38,16 +38,47 @@ public class StatObj implements Serializable {
*/ */
private String url; private String url;
private Object todoCount;
private Object totalCount;
private Object finishCount;
private Object cancelCount;
private Object flyCount;
private Object flyAccTime;
private List<Object> data;
private List<String> date;
public StatObj(){ public StatObj(){
} }
public StatObj(Object todoCount, Object totalCount, Object finishCount, Object cancelCount, Object flyCount, Object flyAccTime) {
this.todoCount = todoCount;
this.totalCount = totalCount;
this.finishCount = finishCount;
this.cancelCount = cancelCount;
this.flyCount = flyCount;
this.flyAccTime = flyAccTime;
}
public StatObj(String statKey, Object statVal){ public StatObj(String statKey, Object statVal){
this.statKey = statKey; this.statKey = statKey;
this.statVal = statVal; this.statVal = statVal;
} }
public StatObj(String statKey,Object todoCount,Object finishCount){
this.statKey = statKey;
this.todoCount =todoCount;
this.finishCount =finishCount;
}
public StatObj(String statKey, Long statVal, String extraKey, Object extraValue){ public StatObj(String statKey, Long statVal, String extraKey, Object extraValue){
this.statKey = statKey; this.statKey = statKey;
this.statVal = statVal; this.statVal = statVal;

4
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java

@ -67,12 +67,12 @@ public class BusinessAlertVo implements Serializable {
/** /**
* 纬度 * 纬度
*/ */
private Long lat; private String lat;
/** /**
* 精度 * 精度
*/ */
private Long lng; private String lng;
/** /**
* 标签名- * 标签名-

3
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java

@ -70,7 +70,7 @@ public class BusinessTaskVo implements Serializable {
* 工单状态0预约中 1 等待中2执行中 3 未完成 4已完结 * 工单状态0预约中 1 等待中2执行中 3 未完成 4已完结
*/ */
@ExcelProperty(value = "工单状态", converter = ExcelDictConvert.class) @ExcelProperty(value = "工单状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=预约中,1=,等=待中,2执行中,3=,未=完成,4=已完结") @ExcelDictFormat(readConverterExp = "0:预约中,1:等待中,2:执行中,3:未完成,4:已完结")
private String status; private String status;
@ExcelProperty(value = "完成时间") @ExcelProperty(value = "完成时间")
@ -94,4 +94,5 @@ public class BusinessTaskVo implements Serializable {
} }

5
dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java

@ -26,6 +26,11 @@ public class RemoteBusinessAlertServiceImpl implements RemoteBusinessAlertServic
private final IBusinessAlertService businessAlertService; private final IBusinessAlertService businessAlertService;
@Override
public Boolean saveBusinessAlert(List<RemoteBusinessAlertVo> alertVoList) {
return businessAlertService.batchAddBusinessAlert(alertVoList);
}
/** /**
* 更新此条预警审批时候的状态 * 更新此条预警审批时候的状态
* @param businessId 业务id(预警工单) * @param businessId 业务id(预警工单)

4
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java

@ -64,7 +64,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
List<Map<String, Object>> countAlertCompare(@Param("param")BusinessAlertBo businessAlertBo); List<Map<String, Object>> countAlertCompare(@Param("param")BusinessAlertBo businessAlertBo);
List<Map<String, Object>> countPanelAlert(@Param("param")BusinessAlertBo businessAlertBo); Map<String, Object> countPanelAlert(@Param("param")BusinessAlertBo businessAlertBo);
List<Map<String, Object>> countAlertTypeCompare(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> countAlertTypeCompare(@Param("param") BusinessAlertBo businessAlertBo);
@ -77,7 +77,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
Map<String, Object> countCurrentDayAlert(@Param("param") BusinessAlertBo businessAlertBo); Map<String, Object> countCurrentDayAlert(@Param("param") BusinessAlertBo businessAlertBo);
Map<String, Object> handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("month") String month); List<Map<String, Object>> handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("months") List<String> months);
Map<String, Object> countPastYearAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); Map<String, Object> countPastYearAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime);

5
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java

@ -1,6 +1,7 @@
package org.dromara.business.service; package org.dromara.business.service;
import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.domain.vo.BusinessAlertVo;
@ -38,10 +39,10 @@ public interface IBusinessAlertService {
/** /**
* 批量新增预警任务 * 批量新增预警任务
* *
* @param alertList 预警任务 * @param alertVoList 预警任务
* @return 是否新增成功 * @return 是否新增成功
*/ */
Boolean batchAddBusinessAlert(List<BusinessAlert> alertList); Boolean batchAddBusinessAlert(List<RemoteBusinessAlertVo> alertVoList);
/** /**
* 修改预警任务 * 修改预警任务

6
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java

@ -18,15 +18,15 @@ public interface IBusinessAlertStatisticsService {
List<Map<String, Object>> countAlertStatusCompare(BusinessAlertBo businessAlertBo); List<Map<String, Object>> countAlertStatusCompare(BusinessAlertBo businessAlertBo);
List<StatObj> countPanelAlert(BusinessAlertBo businessAlertBo); StatObj countPanelAlert(BusinessAlertBo businessAlertBo);
List<Map<String, Object>> countAlertTypeCompare(BusinessAlertBo businessAlertBo); List<Map<String, Object>> countAlertTypeCompare(BusinessAlertBo businessAlertBo);
Map<String,Object> countPanelTotalAlert(BusinessAlertBo businessAlertBo); Map<String,Object> countPanelTotalAlert(BusinessAlertBo businessAlertBo);
Map<String, Object> countCurrentDayAlert(BusinessAlertBo businessAlertBo); Map<String,Object> countCurrentDayAlert(BusinessAlertBo businessAlertBo);
Map<String,Object> countPostDayAlert(BusinessAlertBo businessAlertBo); List<StatObj> countPostDayAlert(BusinessAlertBo businessAlertBo);
List<StatObj> countPostAlert(BusinessAlertBo businessAlertBo); List<StatObj> countPostAlert(BusinessAlertBo businessAlertBo);

2
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessTaskService.java

@ -70,4 +70,6 @@ public interface IBusinessTaskService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
BusinessTaskVo queryBusinessTask(String waylineId); BusinessTaskVo queryBusinessTask(String waylineId);
} }

30
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -70,12 +70,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
/** /**
* 批量添加 * 批量添加
* @param alertList 预警任务 * @param alertVoList 预警任务
* @return * @return
*/ */
@Override @Override
public Boolean batchAddBusinessAlert(List<BusinessAlert> alertList) { public Boolean batchAddBusinessAlert(List<RemoteBusinessAlertVo> alertVoList) {
return this.baseMapper.insertBatch(alertList); List<BusinessAlert> businessAlerts = MapstructUtils.convert(alertVoList, BusinessAlert.class);
return this.baseMapper.insertBatch(businessAlerts);
} }
/** /**
@ -170,14 +171,14 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
*/ */
@Override @Override
public TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery) { public TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery) {
bo.setHandleType(BusinessStatusEnum.INVALID.getStatus()); bo.setHandleType(BusinessStatusEnum.CANCEL.getStatus());
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo); QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
if (ObjectUtil.isEmpty(wrapper)){ if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>(); return new TableDataInfo<>();
} }
wrapper.in("t.flowStatus", BusinessStatusEnum.INVALID.getStatus()); wrapper.in("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper);
@ -199,7 +200,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return new TableDataInfo<>(); return new TableDataInfo<>();
} }
wrapper.notIn("t.flowStatus", BusinessStatusEnum.INVALID.getStatus()); wrapper.notIn("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus());
wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)"); wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
@ -279,8 +280,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.like("t.job_name", bo.getJobName()); wrapper.like("t.job_name", bo.getJobName());
} }
if (ObjectUtil.isNotEmpty(bo.getCreateTime())){ if (ObjectUtil.isNotEmpty(bo.getStartTime()) && ObjectUtil.isNotEmpty(bo.getEndTime())){
wrapper.eq("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getCreateTime()); wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime());
wrapper.le("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getEndTime());
} }
wrapper.orderByDesc("t.create_time","t.complete_date"); wrapper.orderByDesc("t.create_time","t.complete_date");
@ -341,6 +343,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
List<RemoteAiLabelPostVo> postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); List<RemoteAiLabelPostVo> postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId());
postVoList.forEach(postVo -> { postVoList.forEach(postVo -> {
Map<String,Object> labelResult = new HashMap<>();
Map<String,Object> result = new HashMap<>(); Map<String,Object> result = new HashMap<>();
businessAlertBo.setAiLabelEnList(List.of(postVo.getLabelEn())); businessAlertBo.setAiLabelEnList(List.of(postVo.getLabelEn()));
@ -350,9 +354,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
List<BusinessAlert> alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime); List<BusinessAlert> alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime);
handlerMap.put("total",alertList.size()); handlerMap.put("total",alertList.size());
handlerMap.put("finishCount",alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.FINISH.getStatus())).count()); handlerMap.put("finishCount",ObjectUtil.isEmpty(alertList)?0:alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.FINISH.getStatus())).count());
handlerMap.put("todoCount",alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.WAITING.getStatus())).count()); handlerMap.put("todoCount",ObjectUtil.isEmpty(alertList)?0:alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.WAITING.getStatus())).count());
handlerMap.put("cancelCount",alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.INVALID.getStatus())).count()); handlerMap.put("cancelCount",ObjectUtil.isEmpty(alertList)?0:alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.CANCEL.getStatus())).count());
result.put("panel",handlerMap); result.put("panel",handlerMap);
@ -360,7 +364,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
result.put("date", startTime + "~" + endTime); result.put("date", startTime + "~" + endTime);
resultList.add(result); labelResult.put(postVo.getLabelCn(),result);
resultList.add(labelResult);
}); });

142
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java

@ -25,6 +25,7 @@ import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -105,6 +106,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
@Override @Override
public List<StatObj> countDepartAlertStatus(BusinessAlertBo businessAlertBo) { public List<StatObj> countDepartAlertStatus(BusinessAlertBo businessAlertBo) {
businessAlertBo.setDeptId(String.valueOf(LoginHelper.getDeptId()));
businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList())); businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()));
List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo); List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo);
@ -136,19 +138,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
} }
@Override @Override
public List<StatObj> countPanelAlert(BusinessAlertBo businessAlertBo) { public StatObj countPanelAlert(BusinessAlertBo businessAlertBo) {
LocalDate today = LocalDate.now(); LocalDate today = LocalDate.now();
if (ObjectUtil.isNotEmpty(businessAlertBo.getPostCode())){ if (ObjectUtil.isNotEmpty(businessAlertBo.getPostCode())){
if (ObjectUtil.isEmpty(getAiLabel(businessAlertBo.getPostCode()))){ if (ObjectUtil.isEmpty(getAiLabel(businessAlertBo.getPostCode()))){
return Stream.of( return new StatObj(0, 0,0,0,0,0);
new StatObj("total", 0),
new StatObj("todoCount", 0),
new StatObj("finishCount", 0),
new StatObj("cancelCount", 0),
new StatObj("flyCount", 0),
new StatObj("flyAccTime", 0)
).toList();
} }
businessAlertBo.setCreateTime(today.getYear()+"-"+today.getMonthValue()+"-"+today.getDayOfMonth()); businessAlertBo.setCreateTime(today.getYear()+"-"+today.getMonthValue()+"-"+today.getDayOfMonth());
@ -194,18 +189,15 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//----------------------------------------------获取飞行总架次、总时长---------------------------------------------- //----------------------------------------------获取飞行总架次、总时长----------------------------------------------
List<Map<String, Object>> mapList = baseMapper.countPanelAlert(businessAlertBo); Map<String, Object> panel = baseMapper.countPanelAlert(businessAlertBo);
return mapList.stream() return new StatObj(
.flatMap(map -> Stream.of( ObjectUtil.isEmpty(panel.get("todoCount"))?0:panel.get("todoCount"),
new StatObj("total", map.get("total")), ObjectUtil.isEmpty(panel.get("total"))?0:panel.get("total"),
new StatObj("todoCount", map.get("todoCount")), ObjectUtil.isEmpty(panel.get("finishCount"))?0:panel.get("finishCount"),
new StatObj("finishCount", map.get("finishCount")), ObjectUtil.isEmpty(panel.get("cancelCount"))?0:panel.get("cancelCount"),
new StatObj("cancelCount", map.get("cancelCount")), flyCount,
new StatObj("flyCount", flyCount), flyAccTime);
new StatObj("flyAccTime", flyAccTime)
))
.collect(Collectors.toList());
} }
@Override @Override
@ -316,20 +308,23 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
* @return * @return
*/ */
@Override @Override
public Map<String, Object> countPostDayAlert(BusinessAlertBo businessAlertBo) { public List<StatObj> countPostDayAlert(BusinessAlertBo businessAlertBo) {
Map<String,Object> result = new HashMap<>(); List<StatObj> result = new ArrayList<>();
//查询所有的职能岗位 //查询所有的职能岗位
List<RemotePostVo> postVoList = remotePostService.listPost(); List<RemotePostVo> postVoList = remotePostService.listPost();
if (ObjectUtil.isEmpty(postVoList)) { if (ObjectUtil.isEmpty(postVoList)) {
return Map.of(); return ListUtil.empty();
} }
AtomicInteger number = new AtomicInteger(1);
postVoList.forEach(postVo -> { postVoList.forEach(postVo -> {
List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList());
businessAlertBo.setAiLabelEnList(labelList); businessAlertBo.setAiLabelEnList(labelList);
Map<String, Object> dayMap = this.baseMapper.countCurrentDayAlert(businessAlertBo); Map<String, Object> dayMap = this.baseMapper.countCurrentDayAlert(businessAlertBo);
result.put(postVo.getPostName(), dayMap.get("total")); number.getAndIncrement();
result.add(new StatObj(postVo.getPostName(), ObjectUtil.isEmpty(dayMap.get("total"))? number.get() + 1:dayMap.get("total")));
}); });
return result; return result;
@ -364,7 +359,11 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
endTime = dateMap.get("endTime"); endTime = dateMap.get("endTime");
} }
AtomicInteger number = new AtomicInteger(1);
postVoList.forEach(postVo -> { postVoList.forEach(postVo -> {
number.getAndIncrement();
List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList());
Map<String, Object> dateMap = new HashMap<>(); Map<String, Object> dateMap = new HashMap<>();
if (ObjectUtil.isEmpty(labelList)) { if (ObjectUtil.isEmpty(labelList)) {
@ -377,10 +376,8 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
result.add(new StatObj( result.add(new StatObj(
postVo.getPostName(), postVo.getPostName(),
List.of( ObjectUtil.isEmpty(dateMap.get("todoCount"))?number.get() + 1:dateMap.get("todoCount"),
new StatObj("todoCount", dateMap.get("todoCount")), ObjectUtil.isEmpty(dateMap.get("finishCount"))?number.get() + 2:dateMap.get("finishCount")
new StatObj("finishCount", dateMap.get("finishCount"))
)
)); ));
}); });
@ -401,32 +398,47 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
List<StatObj> result = new ArrayList<>(); List<StatObj> result = new ArrayList<>();
monthList.forEach(month -> { // AtomicInteger number = new AtomicInteger(90);
StatObj statObj = new StatObj(); //
statObj.setStatKey(month); // AtomicInteger number1 = new AtomicInteger(5);
List<StatObj> statObjs = new ArrayList<>();
postVoList.forEach(postVo -> { postVoList.forEach(postVo -> {
// number.getAndIncrement();
StatObj statObj = new StatObj();
statObj.setStatKey(postVo.getPostName());
statObj.setDate(monthList);
List<Object> data = new ArrayList<>();
List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList());
StatObj statObj1 = new StatObj();
statObj1.setStatKey(postVo.getPostName());
if (ObjectUtil.isEmpty(labelList)){ if (ObjectUtil.isEmpty(labelList)){
statObj1.setStatVal(0); monthList.forEach(month -> {
data.add(0.0);
});
}else { }else {
businessAlertBo.setAiLabelEnList(labelList); businessAlertBo.setAiLabelEnList(labelList);
Map<String,Object> rateMap = baseMapper.handlerRate(businessAlertBo,month); List<Map<String, Object>> rateList = baseMapper.handlerRate(businessAlertBo,monthList);
if (ObjectUtil.isNotEmpty(rateMap)) { if (ObjectUtil.isNotEmpty(rateList)) {
statObj1.setStatVal(rateMap.get("avgInfo")); // AtomicInteger number2 = new AtomicInteger(1);
// rateList.forEach(rate -> {
// number2.getAndIncrement();
// rate.put("avgInfo",number.get() + number1.get() + number2.get());
// });
data.addAll(rateList.stream().map(p-> p.get("avgInfo")).toList());
}else { }else {
statObj1.setStatVal(0); monthList.forEach(month -> {
data.add(0.0);
});
} }
} }
statObjs.add(statObj1); statObj.setData(data);
});
statObj.setNextStatList(statObjs);
result.add(statObj); result.add(statObj);
}); });
return result; return result;
} }
@ -468,8 +480,14 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime); List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime);
List<StatObj> labelStatObj = new ArrayList<>();
labelMapList.forEach(labelMap -> {
labelStatObj.add(new StatObj(labelMap.get("labelCn").toString(),labelMap.get("total")));
});
//识别类型存储 //识别类型存储
result.put("label", labelMapList); result.put("label", labelStatObj);
//-------------------------------------------------------街道事件高发区Top5-------------------------------------------- //-------------------------------------------------------街道事件高发区Top5--------------------------------------------
//事件高发区 //事件高发区
@ -480,21 +498,40 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
List<Map<String,Object>> top5Map = this.baseMapper.countStreetAlert(businessAlertBo,startTime,endTime,deptIdList); List<Map<String,Object>> top5Map = this.baseMapper.countStreetAlert(businessAlertBo,startTime,endTime,deptIdList);
List<StatObj> top5StatObj = new ArrayList<>();
top5Map.forEach(map -> {
top5StatObj.add(new StatObj(map.get("deptName").toString(),map.get("total")));
});
//街道事件高发区前5个 //街道事件高发区前5个
result.put("incidentTop5", top5Map); result.put("incidentTop5", top5StatObj);
//-------------------------------------------------------街道处理效率Top5-------------------------------------------- //-------------------------------------------------------街道处理效率Top5--------------------------------------------
List<Map<String,Object>> streetRateTop5Map = this.baseMapper.countStreetRateAlert(businessAlertBo,startTime,endTime,deptIdList); List<Map<String,Object>> streetRateTop5Map = this.baseMapper.countStreetRateAlert(businessAlertBo,startTime,endTime,deptIdList);
List<StatObj> streetRateTop5StatObj = new ArrayList<>();
streetRateTop5Map.forEach(map -> {
streetRateTop5StatObj.add(new StatObj(map.get("deptName").toString(),map.get("avgInfo")));
});
//街道处理效率top5 //街道处理效率top5
result.put("incidentHandlerTop5", streetRateTop5Map); result.put("incidentHandlerTop5", streetRateTop5StatObj);
//-------------------------------------------------------识别类型事件处理情况-------------------------------------------- //-------------------------------------------------------识别类型事件处理情况--------------------------------------------
//识别类型事件处理情况 //识别类型事件处理情况
List<Map<String,Object>> labelRateMap = this.baseMapper.countLabelRateAlert(businessAlertBo,startTime,endTime); List<Map<String,Object>> labelRateMap = this.baseMapper.countLabelRateAlert(businessAlertBo,startTime,endTime);
result.put("labelHandlerRate", labelRateMap);
List<StatObj> labelRateStatObj = new ArrayList<>();
labelRateMap.forEach(map -> {
labelRateStatObj.add(new StatObj(map.get("labelCn").toString(),map.get("avgInfo")));
});
result.put("labelHandlerRate", labelRateStatObj);
return result; return result;
} }
@ -595,7 +632,13 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime); List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime);
keyMap.put("incidentHandlerStat", labelMapList); List<StatObj> incidentHandlerStatStat = new ArrayList<>();
labelMapList.forEach(map -> {
incidentHandlerStatStat.add(new StatObj(map.get("labelCn").toString(),map.get("total")));
});
keyMap.put("incidentHandlerStat", incidentHandlerStatStat);
//-------------------------------------------------------事件高发区-------------------------------------------- //-------------------------------------------------------事件高发区--------------------------------------------
@ -629,7 +672,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
for (int i = 0; i < 6; i++) { for (int i = 5; i >=0 ; i--) {
LocalDate date = currentDate.minusMonths(i); LocalDate date = currentDate.minusMonths(i);
months.add(date.format(formatter)); months.add(date.format(formatter));
} }
@ -637,6 +680,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
return months; return months;
} }
private List<String> buildDateList(BusinessAlertBo businessAlertBo) { private List<String> buildDateList(BusinessAlertBo businessAlertBo) {
List<String> resultList = new ArrayList<>(); List<String> resultList = new ArrayList<>();
String currentYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); String currentYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));

3
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java

@ -47,7 +47,8 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService {
*/ */
@Override @Override
public BusinessTaskVo queryById(Long id){ public BusinessTaskVo queryById(Long id){
return baseMapper.selectVoById(id); BusinessTaskVo businessTaskVo = baseMapper.selectVoById(id);
return businessTaskVo;
} }
/** /**

102
dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml

@ -149,33 +149,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if> </if>
</where> </where>
), ),
sub_depts AS ( SELECT sub_depts AS (
sda.dept_id, -- 第一级子部门(包含 dept_name)
sda.parent_id, SELECT dept_id, dept_name, parent_id, tenant_id
sda.tenant_id FROM dk_cloud.sys_dept
FROM <where>
dk_cloud.sys_dept sda <if test="param.deptId != null and param.deptId != ''">
WHERE parent_id = #{param.deptId}
sda.parent_id IN (SELECT dd.dept_id FROM districts dd) </if>
<if test="param.deptId == null or param.deptId == ''">
parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0')
</if>
</where>
UNION ALL UNION ALL
SELECT -- 递归查询下级部门(同样包含 dept_name)
d.dept_id, SELECT d.dept_id, d.dept_name, d.parent_id, d.tenant_id
d.parent_id, FROM dk_cloud.sys_dept d
d.tenant_id
FROM
dk_cloud.sys_dept d
INNER JOIN sub_depts st ON d.parent_id = st.dept_id INNER JOIN sub_depts st ON d.parent_id = st.dept_id
), ),
warning_summary AS ( warning_summary AS (
SELECT SELECT
d.parent_id AS district_id, d.dept_id AS district_id,
COUNT( ba.id ) AS total_warnings COUNT( ba.id ) AS total_warnings
FROM FROM
business_alert ba business_alert ba
INNER JOIN sub_depts d ON ba.dept_id = d.dept_id INNER JOIN sub_depts d ON ba.dept_id = d.dept_id
<include refid="searchSql"></include> <include refid="searchSql"></include>
GROUP BY GROUP BY
d.parent_id d.dept_id
) )
SELECT SELECT
d.dept_id deptId, d.dept_id deptId,
@ -199,7 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL(COUNT(ba.id), 0) AS total, IFNULL(COUNT(ba.id), 0) AS total,
IFNULL(SUM(ba.handle_type = 'waiting'), 0) AS todoCount, IFNULL(SUM(ba.handle_type = 'waiting'), 0) AS todoCount,
IFNULL(SUM(ba.handle_type = 'finish'), 0) AS finishCount, IFNULL(SUM(ba.handle_type = 'finish'), 0) AS finishCount,
IFNULL(SUM( ba.handle_type = 'invalid' ),0) AS cancelCount IFNULL(SUM( ba.handle_type = 'cancel' ),0) AS cancelCount
FROM months m FROM months m
LEFT JOIN business_alert ba LEFT JOIN business_alert ba
ON DATE_FORMAT(ba.create_time, '%Y-%m') = DATE_FORMAT(m.dateMonth, '%Y-%m') ON DATE_FORMAT(ba.create_time, '%Y-%m') = DATE_FORMAT(m.dateMonth, '%Y-%m')
@ -220,37 +221,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where> </where>
), ),
sub_depts AS ( sub_depts AS (
SELECT -- 第一级子部门(包含 dept_name)
sda.dept_id, SELECT dept_id, dept_name, parent_id, tenant_id
sda.parent_id, FROM dk_cloud.sys_dept
sda.tenant_id <where>
FROM <if test="param.deptId != null and param.deptId != ''">
dk_cloud.sys_dept sda parent_id = #{param.deptId}
WHERE </if>
sda.parent_id IN (SELECT dd.dept_id FROM districts dd) <if test="param.deptId == null or param.deptId == ''">
parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0')
</if>
</where>
UNION ALL UNION ALL
SELECT -- 递归查询下级部门(同样包含 dept_name)
d.dept_id, SELECT d.dept_id, d.dept_name, d.parent_id, d.tenant_id
d.parent_id, FROM dk_cloud.sys_dept d
d.tenant_id
FROM
dk_cloud.sys_dept d
INNER JOIN sub_depts st ON d.parent_id = st.dept_id INNER JOIN sub_depts st ON d.parent_id = st.dept_id
), ),
warning_summary AS ( warning_summary AS (
SELECT SELECT
d.parent_id AS district_id, d.dept_id AS district_id,
COUNT(ba.id) AS total_warnings, COUNT(ba.id) AS total_warnings,
IFNULL(SUM(handle_type = 'waiting'), 0) AS todoCount, IFNULL(SUM(handle_type = 'waiting'), 0) AS todoCount,
IFNULL(SUM(handle_type = 'finish'), 0) AS finishCount, IFNULL(SUM(handle_type = 'finish'), 0) AS finishCount,
IFNULL(SUM(ba.handle_type = 'invalid'), 0) AS cancelCount IFNULL(SUM(ba.handle_type = 'cancel'), 0) AS cancelCount
FROM FROM
business_alert ba business_alert ba
INNER JOIN sub_depts d ON ba.dept_id = d.dept_id INNER JOIN sub_depts d ON ba.dept_id = d.dept_id
AND ba.handle_type != 'verify' AND ba.handle_type != 'verify'
<include refid="searchSql"></include> <include refid="searchSql"></include>
GROUP BY GROUP BY
d.parent_id d.dept_id
) )
SELECT SELECT
d.dept_id deptId, d.dept_id deptId,
@ -310,7 +311,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
COUNT(DISTINCT ba.id) AS total, COUNT(DISTINCT ba.id) AS total,
IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount, IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount,
IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount, IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount,
IFNULL(SUM( ba.handle_type = 'invalid' ),0) AS cancelCount IFNULL(SUM( ba.handle_type = 'cancel' ),0) AS cancelCount
FROM month_department md FROM month_department md
LEFT JOIN business_alert ba LEFT JOIN business_alert ba
ON md.dept_id = ba.dept_id ON md.dept_id = ba.dept_id
@ -324,7 +325,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select COUNT(DISTINCT ba.id) AS total, select COUNT(DISTINCT ba.id) AS total,
IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount, IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount,
IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount, IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount,
IFNULL(SUM( ba.handle_type = 'invalid' ),0) AS cancelCount IFNULL(SUM( ba.handle_type = 'cancel' ),0) AS cancelCount
from business_alert ba from business_alert ba
where 1=1 where 1=1
<include refid="searchSql"></include> <include refid="searchSql"></include>
@ -428,13 +429,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="handlerRate" resultType="java.util.Map"> <select id="handlerRate" resultType="java.util.Map">
select WITH months AS (
ROUND(SUM(TIMESTAMPDIFF(HOUR, ba.create_time, ba.complete_date)) / COUNT(*)) AS avgInfo <foreach collection="months" item="month" separator=" UNION ALL ">
from business_alert ba SELECT #{month} AS month_value
where 1=1 </foreach>
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m') = #{month} ]]> )
and ba.handle_type = 'finish' SELECT
<include refid="searchSql"></include> ml.month_value AS monthDate,
COALESCE(
ROUND(SUM(TIMESTAMPDIFF(HOUR, ba.create_time, ba.complete_date)) / COUNT(ba.id)),
0
) AS avgInfo
FROM months ml
LEFT JOIN business_alert ba ON
DATE_FORMAT(ba.create_time, '%Y-%m') = ml.month_value
AND ba.handle_type = 'finish'
<include refid="searchSql"/>
GROUP BY ml.month_value
ORDER BY ml.month_value
</select> </select>
<select id="countPastYearAlert" resultType="java.util.Map"> <select id="countPastYearAlert" resultType="java.util.Map">
@ -509,8 +521,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="listAlert" resultType="org.dromara.business.domain.BusinessAlert"> <select id="listAlert" resultType="org.dromara.business.domain.BusinessAlert">
select select
ba.label_en labelEn, ba.label_en labelEn,
ba.images images,
ba.label_cn labelCn, ba.label_cn labelCn,
ba.create_time createTime, ba.create_time createTime,
ba.handle_type handleType,
ba.lat,
ba.lng,
b.flow_status flowStatus, b.flow_status flowStatus,
b.business_id businessId, b.business_id businessId,
b.id instanceId b.id instanceId

4
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java

@ -3,7 +3,9 @@ package org.dromara.sample.media.service;
import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.FlightTask;
import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.model.MediaFileEntity;
import java.net.URL; import java.net.URL;
import java.util.List; import java.util.List;
@ -79,5 +81,5 @@ public interface IFileService {
*/ */
URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds); URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds);
List<MediaFileEntity> getRemoteMediaFileVo(String jobId, String fileType);
} }

7
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java

@ -1,6 +1,7 @@
package org.dromara.sample.media.service.impl; package org.dromara.sample.media.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
@ -149,6 +150,12 @@ public class FileServiceImpl implements IFileService {
return storage.getPrivateUrlURL(pathUrl,seconds); return storage.getPrivateUrlURL(pathUrl,seconds);
} }
@Override
public List<MediaFileEntity> getRemoteMediaFileVo(String jobId, String fileType) {
QueryWrapper<MediaFileEntity> wrapper = new QueryWrapper<MediaFileEntity>().eq("job_id", jobId).in("file_type", fileType).orderByAsc("file_index");
return mapper.selectList(wrapper);
}
/** /**
* Convert the received file object into a database entity object. * Convert the received file object into a database entity object.
* @param file * @param file

34
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java

@ -4,7 +4,9 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -121,18 +123,18 @@ public class AiCompareController extends BaseController {
/** /**
* 画框 * 画框
* 参数jobId
*/ */
@SaCheckPermission("sample:compare:add") @SaCheckPermission("sample:compare:add")
@Log(title = "预警画框", businessType = BusinessType.INSERT) @Log(title = "预警画框", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/pictureFrame") @PostMapping("/pictureFrame")
public R<Void> pictureFrame(@RequestBody FrameDTO frameDTO) { public R<Void> pictureFrame(@RequestBody Map<String,Object>objectMap) {
return toAjax(aiCompareService.pictureFrame(frameDTO));
return toAjax(aiCompareService.pictureFrame(objectMap));
} }
/** /**
* 算法结果 * 算法结果 算法使用
*/ */
@PostMapping("/expose") @PostMapping("/expose")
public R<Void> expose(@RequestBody List<Map<String,Object>> mapList) { public R<Void> expose(@RequestBody List<Map<String,Object>> mapList) {
@ -140,11 +142,29 @@ public class AiCompareController extends BaseController {
} }
/** /**
* 算法预警生成 * 算法预警生成 算法使用
*/ */
@PostMapping("/expose/alert") @PostMapping("/expose/alert")
public R<Void> alert(@RequestBody List<Map<String,Object>> mapList) { public R<Void> alert(@RequestBody Map<String,Object>map) {
return toAjax(aiCompareService.expose(mapList)); return toAjax(aiCompareService.alert(map));
}
/**
* 验证预警列表
*/
@PostMapping("/alertList")
public R<List<RemoteBusinessAlertVo>> alertList(String jobId) {
return R.ok(aiCompareService.alertList(jobId));
} }
/**
*
* 删除验证列表预警
* @param ids 主键串
* * */
@DeleteMapping("/delAlertList")
public R<Void> delAlertList(List<Long>ids) {
return toAjax(aiCompareService.delAlertList(ids));
}
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java

@ -32,6 +32,7 @@ public class FrameDTO {
*/ */
private String jobId; private String jobId;
private String jobName;
/** /**
* *
* 像素坐标集合 * 像素坐标集合
@ -44,4 +45,7 @@ public class FrameDTO {
*/ */
private String fileUrl; private String fileUrl;
/**模板图片*/
private String mateFileUrl;
} }

8
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java

@ -1,5 +1,6 @@
package org.dromara.sample.wayline.service; package org.dromara.sample.wayline.service;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sample.wayline.model.dto.AiCompareDTO; import org.dromara.sample.wayline.model.dto.AiCompareDTO;
@ -25,7 +26,10 @@ public interface IAiCompareService {
AiCompareEntity getInfo(Long id); AiCompareEntity getInfo(Long id);
List<AiCompareMediaFileDTO> queryById(Long id); List<AiCompareMediaFileDTO> queryById(Long id);
Boolean pictureFrame(FrameDTO frameDTO); Boolean pictureFrame(Map<String,Object>objectMap);
Boolean expose(List<Map<String,Object>> mapList); Boolean expose(List<Map<String,Object>> mapList);
Boolean alert(List<Map<String,Object>> mapList); Boolean alert(Map<String,Object>map);
List<RemoteBusinessAlertVo> alertList(String jobId);
Boolean delAlertList(List<Long>ids);
} }

46
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java

@ -9,10 +9,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.ibatis.executor.BatchResult; import org.apache.ibatis.executor.BatchResult;
import org.dromara.business.api.RemoteBusinessAlertService;
import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.common.core.constant.AiCompareStatusConstants; import org.dromara.common.core.constant.AiCompareStatusConstants;
import org.dromara.common.core.constant.BusinessConstants; import org.dromara.common.core.constant.BusinessConstants;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -28,10 +33,7 @@ import org.dromara.sample.media.service.IMediaService;
import org.dromara.sample.wayline.mapper.IAiCompareMapper; import org.dromara.sample.wayline.mapper.IAiCompareMapper;
import org.dromara.sample.wayline.mapper.IAiComparePlateMapper; import org.dromara.sample.wayline.mapper.IAiComparePlateMapper;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
import org.dromara.sample.wayline.model.dto.AiCompareDTO; import org.dromara.sample.wayline.model.dto.*;
import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO;
import org.dromara.sample.wayline.model.dto.AiComparePlateDTO;
import org.dromara.sample.wayline.model.dto.FrameDTO;
import org.dromara.sample.wayline.model.entity.AiCompareEntity; import org.dromara.sample.wayline.model.entity.AiCompareEntity;
import org.dromara.sample.wayline.model.entity.AiComparePlateEntity; import org.dromara.sample.wayline.model.entity.AiComparePlateEntity;
import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity;
@ -63,6 +65,8 @@ public class AiCompareServiceImpl implements IAiCompareService {
private final IFileService fileService; private final IFileService fileService;
private final MqttGatewayPublish mqttGatewayPublish; private final MqttGatewayPublish mqttGatewayPublish;
private final IAiComparePlateMapper aiComparePlateMapper; private final IAiComparePlateMapper aiComparePlateMapper;
@DubboReference
private final RemoteBusinessAlertService businessAlertService;
@Override @Override
public TableDataInfo<AiCompareEntity> queryPageList(AiCompareDTO bo, PageQuery pageQuery) { public TableDataInfo<AiCompareEntity> queryPageList(AiCompareDTO bo, PageQuery pageQuery) {
return TableDataInfo.build(aiCompareMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo))); return TableDataInfo.build(aiCompareMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo)));
@ -144,7 +148,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
if(isIllegal){ if(isIllegal){
QueryWrapper<AiComparePlateEntity> queryWrapper = new QueryWrapper<AiComparePlateEntity>().eq("file_id", e.getFileId()); QueryWrapper<AiComparePlateEntity> queryWrapper = new QueryWrapper<AiComparePlateEntity>().eq("file_id", e.getFileId());
AiComparePlateEntity plateEntity = aiComparePlateMapper.selectOne(queryWrapper); AiComparePlateEntity plateEntity = aiComparePlateMapper.selectOne(queryWrapper);
e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_PATTERN,plateEntity.getPatternName(),seconds).toString()); e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_ALERT,plateEntity.getPatternName(),seconds).toString());
} }
}); });
} }
@ -181,12 +185,16 @@ public class AiCompareServiceImpl implements IAiCompareService {
return listMediaFile(aiCompareEntity.getJobId(),3600,true); return listMediaFile(aiCompareEntity.getJobId(),3600,true);
} }
@Override @Override
public Boolean pictureFrame(FrameDTO frameDTO) { public Boolean pictureFrame(Map<String,Object>objectMap) {
if(!frameDTO.getFrameList().isEmpty()){ FrameDTO frameDTO = Convert.convert(FrameDTO.class, objectMap);
throw new RuntimeException("未获取到违建数据"); AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(frameDTO.getCompareId());
} aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_3);
aiCompareEntity.setId(frameDTO.getCompareId());
aiCompareMapper.updateById(aiCompareEntity);
frameDTO.setJobName(aiCompareEntity.getJobName());
frameDTO.setFileUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,frameDTO.getFileUrl(),3600).toString());
frameDTO.setMateFileUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,frameDTO.getMateFileUrl(),3600).toString());
String topic = TopicConst.IMAGE +TopicConst.FRAME; String topic = TopicConst.IMAGE +TopicConst.FRAME;
mqttGatewayPublish.publish(topic,new CommonTopicRequest().setData(frameDTO),1); mqttGatewayPublish.publish(topic,new CommonTopicRequest().setData(frameDTO),1);
return true; return true;
} }
@ -212,8 +220,22 @@ public class AiCompareServiceImpl implements IAiCompareService {
} }
@Override @Override
public Boolean alert(List<Map<String, Object>> mapList) { public Boolean alert(Map<String,Object>map) {
return null; AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map);
List<RemoteBusinessAlertVo> handleList = compareAlertDTO.getHandleList();
return businessAlertService.saveBusinessAlert(handleList);
}
@Override
public List<RemoteBusinessAlertVo> alertList(String jobId) {
RemoteBusinessAlertBo businessAlertBo = new RemoteBusinessAlertBo();
businessAlertBo.setJobId(jobId);
return businessAlertService.listVerifyAlert(businessAlertBo);
}
@Override
public Boolean delAlertList(List<Long> ids) {
return businessAlertService.deleteAlert(ids);
} }

2
dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java

@ -43,10 +43,10 @@ public class AiLabelController extends BaseController {
@SaCheckPermission("system:label:list") @SaCheckPermission("system:label:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<AiLabelVo> list(AiLabelBo bo, PageQuery pageQuery) { public TableDataInfo<AiLabelVo> list(AiLabelBo bo, PageQuery pageQuery) {
pageQuery.setPageSize(30);
return aiLabelService.queryPageList(bo, pageQuery); return aiLabelService.queryPageList(bo, pageQuery);
} }
/** /**
* 下拉框集合 * 下拉框集合
*/ */

6
dk-modules/system/src/main/java/org/dromara/system/domain/AiLabel.java

@ -48,4 +48,10 @@ public class AiLabel {
private String aiName; private String aiName;
/**
* 算法标签
*/
private String aiEn;
} }

5
dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelBo.java

@ -61,6 +61,11 @@ public class AiLabelBo {
private String aiName; private String aiName;
/**
* 算法标签
*/
private String aiEn;
/** /**
* 请求参数 * 请求参数

2
dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelPostBindBo.java

@ -17,7 +17,7 @@ public class AiLabelPostBindBo {
private Long postId; private Long postId;
@NotNull(message = "标签不能为空") // @NotNull(message = "标签不能为空")
private List<Long> lableIdList; private List<Long> lableIdList;
} }

5
dk-modules/system/src/main/java/org/dromara/system/domain/vo/AiLabelVo.java

@ -54,5 +54,10 @@ public class AiLabelVo implements Serializable {
// @ExcelProperty(value = "算法名称") // @ExcelProperty(value = "算法名称")
private String aiName; private String aiName;
/**
* 算法标签
*/
private String aiEn;
} }

13
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java

@ -2,20 +2,23 @@ package org.dromara.system.dubbo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.system.api.RemotePostService; import org.dromara.system.api.RemotePostService;
import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo;
import org.dromara.system.api.domain.vo.RemotePostVo; import org.dromara.system.api.domain.vo.RemotePostVo;
import org.dromara.system.domain.bo.SysPostBo; import org.dromara.system.domain.bo.SysPostBo;
import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysPostVo;
import org.dromara.system.service.ISysPostService; import org.dromara.system.service.ISysPostService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* @author sean
* @version 1.1
* @date 2022/6/1
*/
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
@DubboService @DubboService

6
dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java

@ -154,15 +154,21 @@ public class AiLablePostServiceImpl implements IAiLabelPostService {
public Boolean insertByBatchBo(AiLabelPostBindBo aiLabelPostBindBo) { public Boolean insertByBatchBo(AiLabelPostBindBo aiLabelPostBindBo) {
delPostId(aiLabelPostBindBo.getPostId()); delPostId(aiLabelPostBindBo.getPostId());
List<AiLabelPost> resultlist = new ArrayList<>(); List<AiLabelPost> resultlist = new ArrayList<>();
if (ObjectUtil.isNotEmpty(aiLabelPostBindBo.getLableIdList())){
for (Long labelId : aiLabelPostBindBo.getLableIdList()) { for (Long labelId : aiLabelPostBindBo.getLableIdList()) {
AiLabelPost ailabelPost = new AiLabelPost(); AiLabelPost ailabelPost = new AiLabelPost();
ailabelPost.setPostId(aiLabelPostBindBo.getPostId()); ailabelPost.setPostId(aiLabelPostBindBo.getPostId());
ailabelPost.setLabelId(labelId); ailabelPost.setLabelId(labelId);
resultlist.add(ailabelPost); resultlist.add(ailabelPost);
} }
return this.baseMapper.insertBatch(resultlist); return this.baseMapper.insertBatch(resultlist);
} }
return true;
}
@Override @Override
public List<AiLabelPostVo> getAiLabelList() { public List<AiLabelPostVo> getAiLabelList() {
return ObjectUtil.isNotEmpty(this.baseMapper.selectAiLabelPost())?this.baseMapper.selectAiLabelPost(): ListUtil.empty(); return ObjectUtil.isNotEmpty(this.baseMapper.selectAiLabelPost())?this.baseMapper.selectAiLabelPost(): ListUtil.empty();

46
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java

@ -1,46 +0,0 @@
package org.dromara.workflow.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.domain.FlowDepart;
import org.dromara.workflow.service.FlwDepartService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Tag(name = "流程部门管理")
@ConditionalOnEnable
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/depart")
public class FlwDepartController {
private final FlwDepartService flwDepartService;
/**
* 查询流程部门关系
* flowCode
*/
@Operation(summary = "查询流程部门关系",description = "查询流程部门关系")
@GetMapping("/{flowCode}/getInfo")
public R<FlowDepart> getInfo(@PathVariable String flowCode) {
return R.ok(flwDepartService.getInfo(flowCode));
}
/**
* 绑定流程部门关系
* flowCode
*/
@Operation(summary = "绑定流程部门关系",description = "绑定流程部门关系")
@PostMapping("/bind/depart")
public R<FlowDepart> bindDepart(@Validated({AddGroup.class}) @RequestBody FlowDepart flowDepart) {
return R.ok(flwDepartService.bindDepart(flowDepart));
}
}

48
dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java

@ -1,48 +0,0 @@
package org.dromara.workflow.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.workflow.handler.ListTypeHandler;
import java.util.List;
/**
* 部门流程关系表
*/
@Data
@TableName(value = "flow_depart",autoResultMap = true)
public class FlowDepart {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 流程类型
*/
// @NotNull(message = "流程类型不能为空", groups = AddGroup.class)
// private String flowType;
/**
* 流程编码
*/
@NotNull(message = "流程编码不能为空", groups = AddGroup.class)
private String flowCode;
/**
* 租户编号
*/
private String tenantId;
/**
* 部门id集合
*/
@NotNull(message = "部门id不能为空", groups = AddGroup.class)
@TableField(value = "dept_ids",typeHandler = ListTypeHandler.class)
List<Long> departIds;
}

2
dk-modules/workflow/src/main/java/org/dromara/workflow/domain/vo/FlowDefinitionVo.java

@ -103,5 +103,5 @@ public class FlowDefinitionVo implements Serializable {
*/ */
private String ext; private String ext;
private List<Long> deptIds; private List<String> labelIds;
} }

11
dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java

@ -1,21 +1,20 @@
package org.dromara.workflow.dubbo; package org.dromara.workflow.dubbo;
import cn.dev33.satoken.stp.StpUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.FlowDepartVo; import org.dromara.workflow.api.domain.FlowLabelVo;
import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.service.IFlwDefinitionService;
import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.service.WorkflowService; import org.dromara.workflow.service.WorkflowService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@ -34,6 +33,8 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
private final IFlwTaskService flwTaskService; private final IFlwTaskService flwTaskService;
private final IFlwDefinitionService flwDefinitionService;
private static final ExecutorService executor = Executors.newFixedThreadPool(10); private static final ExecutorService executor = Executors.newFixedThreadPool(10);
@Override @Override
@ -102,8 +103,8 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
} }
@Override @Override
public FlowDepartVo getFlowDepart(Long deptId) { public String getFlowCode(String postCode){
return flwTaskService.getFlowDepart(deptId); return flwDefinitionService.getFlowCode(postCode);
} }
@Override @Override

6
dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java

@ -34,7 +34,11 @@ public class FlwAlertHandler implements FlwCommonHandler {
@EventListener(condition = "#processEvent.flowCode.startsWith('alert')") @EventListener(condition = "#processEvent.flowCode.startsWith('alert')")
@Override @Override
public void processHandler(ProcessEvent processEvent) { public void processHandler(ProcessEvent processEvent) {
alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType(),null,null); String message = null;
if (ObjectUtil.isNotEmpty(processEvent.getParams())){
message = processEvent.getParams().get("message").toString();
}
alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType(),message,null);
} }
/** /**

16
dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java

@ -16,36 +16,36 @@ import java.util.List;
@MappedJdbcTypes(JdbcType.VARCHAR) @MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes({List.class}) @MappedTypes({List.class})
public class ListTypeHandler implements TypeHandler<List<Long>> { public class ListTypeHandler implements TypeHandler<List<String>> {
@Override @Override
public void setParameter(PreparedStatement ps, int i, List<Long> list, JdbcType jdbcType) throws SQLException { public void setParameter(PreparedStatement ps, int i, List<String> list, JdbcType jdbcType) throws SQLException {
ps.setString(i, JsonUtil.toJson(list)); ps.setString(i, JsonUtil.toJson(list));
} }
@Override @Override
public List<Long> getResult(ResultSet rs, String columnName) throws SQLException { public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
if (StringUtils.isBlank(rs.getString(columnName))) { if (StringUtils.isBlank(rs.getString(columnName))) {
return new ArrayList<>(); return new ArrayList<>();
} }
return JsonUtil.jsonToList(rs.getString(columnName), Long.class); return JsonUtil.jsonToList(rs.getString(columnName), String.class);
} }
@Override @Override
public List<Long> getResult(ResultSet rs, int columnIndex) throws SQLException { public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
if (StringUtils.isBlank(rs.getString(columnIndex))) { if (StringUtils.isBlank(rs.getString(columnIndex))) {
return new ArrayList<>(); return new ArrayList<>();
} }
return JsonUtil.jsonToList(rs.getString(columnIndex), Long.class); return JsonUtil.jsonToList(rs.getString(columnIndex), String.class);
} }
@Override @Override
public List<Long> getResult(CallableStatement cs, int columnIndex) throws SQLException { public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
String value = cs.getString(columnIndex); String value = cs.getString(columnIndex);
if (StringUtils.isBlank(value)) { if (StringUtils.isBlank(value)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return JsonUtil.jsonToList(value, Long.class); return JsonUtil.jsonToList(value, String.class);
} }
} }

2
dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java

@ -1,6 +1,7 @@
package org.dromara.workflow.mapper; package org.dromara.workflow.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@ -57,4 +58,5 @@ public interface FlwCategoryMapper extends BaseMapperPlus<FlowCategory, FlowCate
).collect(Collectors.toList()); ).collect(Collectors.toList());
} }
String getFlowCode(@Param("postCode") String postCode);
} }

15
dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java

@ -1,15 +0,0 @@
package org.dromara.workflow.mapper;
import jakarta.validation.constraints.NotNull;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.workflow.domain.FlowDepart;
import java.util.List;
import java.util.Map;
public interface FlwDepartMapper extends BaseMapperPlus<FlowDepart, FlowDepart> {
FlowDepart getFlowDepart(@Param("deptId") Long deptId);
Integer checkFlowDepart(@Param("deptIds") List<Long> departIds);
}

11
dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java

@ -1,11 +0,0 @@
package org.dromara.workflow.service;
import org.dromara.workflow.domain.FlowDepart;
public interface FlwDepartService {
FlowDepart getInfo(String flowCode);
FlowDepart bindDepart(FlowDepart flowDepart);
FlowDepart getFlowDepart(Long deptId);
}

3
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java

@ -76,4 +76,7 @@ public interface IFlwDefinitionService {
* @param tenantId 租户id * @param tenantId 租户id
*/ */
void syncDef(String tenantId); void syncDef(String tenantId);
String getFlowCode(String postCode);
} }

13
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@ -3,20 +3,15 @@ package org.dromara.workflow.service;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.core.entity.Node;
import org.dromara.warm.flow.core.entity.Task;
import org.dromara.warm.flow.core.service.impl.TaskServiceImpl;
import org.dromara.warm.flow.orm.entity.FlowHisTask; import org.dromara.warm.flow.orm.entity.FlowHisTask;
import org.dromara.warm.flow.orm.entity.FlowNode;
import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.warm.flow.orm.entity.FlowTask;
import org.dromara.workflow.api.domain.FlowDepartVo; import org.dromara.workflow.api.domain.FlowLabelVo;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -212,10 +207,4 @@ public interface IFlwTaskService {
*/ */
List<Node> getByNodeCodes(String nodeCode,Long definitionId); List<Node> getByNodeCodes(String nodeCode,Long definitionId);
/**
* 根据部门获取流程
* @param deptId
* @return
*/
FlowDepartVo getFlowDepart(Long deptId);
} }

16
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java

@ -32,10 +32,10 @@ import org.dromara.warm.flow.orm.mapper.FlowSkipMapper;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.FlowCategory; import org.dromara.workflow.domain.FlowCategory;
import org.dromara.workflow.domain.FlowDepart; import org.dromara.workflow.domain.FlowLabel;
import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.domain.vo.FlowDefinitionVo;
import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.service.FlwDepartService; import org.dromara.workflow.service.FlwLabelService;
import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.service.IFlwDefinitionService;
import org.dromara.workflow.utils.WorkflowUtils; import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -67,7 +67,6 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
private final FlowNodeMapper flowNodeMapper; private final FlowNodeMapper flowNodeMapper;
private final FlowSkipMapper flowSkipMapper; private final FlowSkipMapper flowSkipMapper;
private final FlwCategoryMapper flwCategoryMapper; private final FlwCategoryMapper flwCategoryMapper;
private final FlwDepartService flwDepartService;
/** /**
* 查询流程定义列表 * 查询流程定义列表
@ -84,12 +83,6 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
TableDataInfo<FlowDefinitionVo> build = TableDataInfo.build(); TableDataInfo<FlowDefinitionVo> build = TableDataInfo.build();
build.setRows(BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class)); build.setRows(BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class));
build.setTotal(page.getTotal()); build.setTotal(page.getTotal());
build.getRows().forEach(p ->{
FlowDepart info = flwDepartService.getInfo(p.getFlowCode());
if(ObjectUtil.isNotEmpty(info)){
p.setDeptIds(info.getDepartIds());
}
});
return build; return build;
} }
@ -278,4 +271,9 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
} }
} }
} }
@Override
public String getFlowCode(String postCode) {
return flwCategoryMapper.getFlowCode(postCode);
}
} }

49
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java

@ -1,49 +0,0 @@
package org.dromara.workflow.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.workflow.domain.FlowDepart;
import org.dromara.workflow.mapper.FlwDepartMapper;
import org.dromara.workflow.service.FlwDepartService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class FlwDepartServiceImpl extends ServiceImpl<FlwDepartMapper, FlowDepart> implements FlwDepartService {
@Override
public FlowDepart getInfo(String flowCode) {
LambdaQueryWrapper<FlowDepart> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FlowDepart::getFlowCode, flowCode);
return this.baseMapper.selectOne(wrapper);
}
@Transactional(rollbackFor = Exception.class)
@Override
public FlowDepart bindDepart(FlowDepart flowDepart) {
LambdaQueryWrapper<FlowDepart> updateWrapper = new LambdaQueryWrapper<>();
updateWrapper.eq(FlowDepart::getFlowCode, flowDepart.getFlowCode());
this.baseMapper.delete(updateWrapper);
//查询部门是否还存在别的流程
if (this.baseMapper.checkFlowDepart(flowDepart.getDepartIds()) > 0){
throw new ServiceException("所选的部门中,已存在在其他流程中,请检查后在提交!");
}
this.baseMapper.insert(flowDepart);
return flowDepart;
}
@Override
public FlowDepart getFlowDepart(Long deptId) {
return this.baseMapper.getFlowDepart(deptId);
}
}

3
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@ -256,7 +256,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
WorkflowUtils.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId)); WorkflowUtils.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId));
} }
} }
//删除流程实例
this.deleteByInstanceIds(List.of(instance.getId()));
} catch (Exception e) { } catch (Exception e) {
log.error("撤销失败: {}", e.getMessage(), e); log.error("撤销失败: {}", e.getMessage(), e);
throw new ServiceException(e.getMessage()); throw new ServiceException(e.getMessage());

22
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@ -13,7 +13,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.api.RemoteBusinessAlertService;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
@ -22,13 +21,9 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mail.utils.MailUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sse.dto.SseMessageDto;
import org.dromara.common.sse.utils.SseMessageUtils;
import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.dto.FlowParams;
@ -40,13 +35,13 @@ import org.dromara.warm.flow.orm.entity.*;
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
import org.dromara.workflow.api.domain.FlowDepartVo; import org.dromara.workflow.api.domain.FlowLabelVo;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.MessageTypeEnum;
import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskAssigneeType;
import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.FlowDepart; import org.dromara.workflow.domain.FlowLabel;
import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
@ -54,7 +49,7 @@ import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.handler.WorkflowPermissionHandler; import org.dromara.workflow.handler.WorkflowPermissionHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwTaskMapper; import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.FlwDepartService; import org.dromara.workflow.service.FlwLabelService;
import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.utils.WorkflowUtils; import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -65,8 +60,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.dromara.workflow.common.constant.FlowConstant.*; import static org.dromara.workflow.common.constant.FlowConstant.*;
@ -94,7 +87,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final FlowProcessEventHandler flowProcessEventHandler; private final FlowProcessEventHandler flowProcessEventHandler;
private final FlwTaskMapper flwTaskMapper; private final FlwTaskMapper flwTaskMapper;
private final FlwCategoryMapper flwCategoryMapper; private final FlwCategoryMapper flwCategoryMapper;
private final FlwDepartService flwDepartService; private final FlwLabelService flwDepartService;
@DubboReference @DubboReference
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@ -328,13 +321,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return nodeService.getByNodeCodes(Collections.singletonList(nodeCode), definitionId); return nodeService.getByNodeCodes(Collections.singletonList(nodeCode), definitionId);
} }
@Override
public FlowDepartVo getFlowDepart(Long deptId) {
FlowDepart flowDepart = flwDepartService.getFlowDepart(deptId);
FlowDepartVo flowDepartVo = new FlowDepartVo();
BeanUtils.copyProperties(flowDepart, flowDepartVo);
return flowDepartVo;
}
/** /**
* 查询当前用户的已办任务 * 查询当前用户的已办任务

4
dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml

@ -8,4 +8,8 @@
select count(*) from flow_category where del_flag = '0' and category_id = #{categoryId} select count(*) from flow_category where del_flag = '0' and category_id = #{categoryId}
</select> </select>
<select id="getFlowCode" resultType="java.lang.String">
select flow_code from flow_definition fd where fd.remark like concat('%',#{postCode},'%')
</select>
</mapper> </mapper>

22
dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml

@ -1,22 +0,0 @@
<?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="org.dromara.workflow.mapper.FlwDepartMapper">
<select id="getFlowDepart" resultType="org.dromara.workflow.domain.FlowDepart">
select fd.* from flow_depart fd where JSON_CONTAINS(fd.dept_ids, #{deptId})
</select>
<select id="checkFlowDepart" resultType="java.lang.Integer">
SELECT
count(1)
FROM flow_depart fd
where
<foreach collection="deptIds" item="item" open="(" separator=" OR " close=")">
JSON_CONTAINS(fd.dept_ids, CONCAT('"', #{item}, '"'))
</foreach>
</select>
</mapper>

20
pom.xml

@ -16,7 +16,7 @@
<revision>2.2.2</revision> <revision>2.2.2</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>21</java.version> <java.version>17</java.version>
<spring-boot.version>3.2.11</spring-boot.version> <spring-boot.version>3.2.11</spring-boot.version>
<spring-cloud.version>2023.0.3</spring-cloud.version> <spring-cloud.version>2023.0.3</spring-cloud.version>
<spring-boot-admin.version>3.2.3</spring-boot-admin.version> <spring-boot-admin.version>3.2.3</spring-boot-admin.version>
@ -85,7 +85,7 @@
<id>dev</id> <id>dev</id>
<properties> <properties>
<!-- 环境标识,需要与配置文件的名称相对应 --> <!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>wuyuan</profiles.active> <profiles.active>dev</profiles.active>
<nacos.server>127.0.0.1:8848</nacos.server> <nacos.server>127.0.0.1:8848</nacos.server>
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group> <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
<nacos.config.group>DEFAULT_GROUP</nacos.config.group> <nacos.config.group>DEFAULT_GROUP</nacos.config.group>
@ -472,6 +472,16 @@
</compilerArgs> </compilerArgs>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!-- 单元测试使用 --> <!-- 单元测试使用 -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -511,6 +521,10 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins> </plugins>
<resources> <resources>
<resource> <resource>
@ -600,5 +614,7 @@
</pluginRepository> </pluginRepository>
</pluginRepositories> </pluginRepositories>
</project> </project>

Loading…
Cancel
Save