0be1ca7d by 肖初晴

【DAOP-1.0】数据需求

【功能点】新增接口
1 parent bcec1b99
package com.csbr.qingcloud.domain.vo;
import csbr.cloud.entity.domain.base.dto.BasePageDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 查询参数
* @author: xushaobo
* @create: 2024-12-30 16:29
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "查询参数")
public class DemandQueryVO extends BasePageDTO {
}
package com.csbr.qingcloud.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.mybatis.entity.MfDemand;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 逻辑层接口
* @author: xushaobo
* @create: 2024-12-30 16:29
**/
public interface MfDemandService extends CsbrService<MfDemand> {
}
package com.csbr.qingcloud.controller;
package com.csbr.qingcloud.portal.controller;
import com.csbr.cloud.common.response.CommonRes;
import csbr.cloud.entity.annotation.SystemLog;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.domain.vo.DemandRQVO;
import com.csbr.qingcloud.domain.vo.DemandRSVO;
import com.csbr.qingcloud.service.DemandService;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.portal.domain.vo.DemandRQVO;
import com.csbr.qingcloud.portal.domain.vo.DemandRSVO;
import com.csbr.qingcloud.portal.service.DemandService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
......@@ -17,14 +18,14 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: -控制器
* @author: xushaobo
* @create: 2024-12-30 16:29
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求-控制器
* @author: xcq
* @create: 2024-12-31 18:46
**/
@RestController
@RequestMapping("/demand")
@Tag(name = "-控制器")
@Tag(name = "数据需求-控制器")
public class DemandController {
@Resource
......@@ -33,49 +34,57 @@ public class DemandController {
//region 基本操作
@PostMapping("/save")
@SystemLog(value = "-新增")
@Operation(summary = "-新增")
@SystemLog(value = "数据需求-新增")
@Operation(summary = "数据需求-新增")
public CommonRes<Boolean> saveDemand(@RequestBody @Valid DemandRQVO vo) {
demandService.saveDemand(vo);
return CommonRes.success(true);
}
@PutMapping("/update")
@SystemLog(value = "-修改")
@Operation(summary = "-修改")
@SystemLog(value = "数据需求-修改")
@Operation(summary = "数据需求-修改")
public CommonRes<Boolean> updateDemand(@RequestBody @Valid DemandRQVO vo) {
demandService.updateDemand(vo);
return CommonRes.success(true);
}
@DeleteMapping("/delete")
@SystemLog(value = "-批量删除")
@Operation(summary = "-批量删除")
@SystemLog(value = "数据需求-批量删除")
@Operation(summary = "数据需求-批量删除")
public CommonRes<Boolean> removeByGuids(@RequestBody List<String> guids) {
demandService.removeByGuids(guids);
return CommonRes.success(true);
}
@PostMapping("/page-list")
@SystemLog(value = "-分页")
@Operation(summary = "-分页")
@SystemLog(value = "数据需求-分页")
@Operation(summary = "数据需求-分页")
public CommonRes<PageListVO<DemandRSVO>> pageList(@RequestBody @Valid DemandQueryVO queryVO) {
PageListVO<DemandRSVO> pageVO = demandService.pageList(queryVO);
return CommonRes.success(pageVO);
}
@GetMapping("/detail")
@SystemLog(value = "-详情")
@SystemLog(value = "数据需求-详情")
@Operation(
summary = "-详情",
summary = "数据需求-详情",
parameters = {
@Parameter(name = "guid", description = "唯一标识", required = true)}
@Parameter(name = "guid", description = "数据需求唯一标识", required = true)}
)
public CommonRes<DemandRSVO> getDemandDetail(@RequestParam String guid) {
DemandRSVO vo = demandService.getDemandDetail(guid);
return CommonRes.success(vo);
}
@PostMapping("/flow-call-back")
@SystemLog(value = "数据需求-流程结束后进行业务回调")
@Operation(summary = "数据需求-流程结束后进行业务回调", hidden = true)
public CommonRes<Boolean> flowCallBack(@RequestBody @Valid BizCallbackDTO dto) {
demandService.flowCallBack(dto);
return CommonRes.success(true);
}
//endregion
}
......
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.workflow.domain.dto.appove.FlowBizGuidQueryDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求查询参数
* @author: xcq
* @create: 2024-12-31 18:46
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "数据需求查询参数")
public class DemandQueryVO extends FlowBizGuidQueryDTO {
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃】")
private String bizApproveState;
/******** 自定义扩展 *****/
/**
* 数据唯一标识【List集合】
*/
@Schema(description = "数据唯一标识", hidden = true)
private List<String> guidList;
/**
* 是否调用查询的判断
*/
@Schema(description = "是否调用查询的判断", hidden = true)
private Boolean isNeedQuery;
}
package com.csbr.qingcloud.domain.vo;
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
......@@ -7,20 +8,14 @@ import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 新增、修改参数
* @author: xushaobo
* @create: 2024-12-30 16:29
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求新增、修改参数
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Data
@Schema(title = "新增、修改参数")
public class DemandRQVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
@Schema(title = "数据需求新增、修改参数")
public class DemandRQVO extends FlowRQBaseVO {
/**
* 数据需求名称
......@@ -29,12 +24,24 @@ public class DemandRQVO {
private String dataDemandName;
/**
* 需求类型 (1 产业端;2 科研端;3 临床端)
* 需求类型
*/
@Schema(description = "需求类型 (1 产业端;2 科研端;3 临床端)")
@Schema(description = "需求类型")
private String requirementType;
/**
* 需求分类【1新增 2调整】
*/
@Schema(description = "需求分类【1新增 2调整】")
private String demandCategory;
/**
* 数据产品唯一标识
*/
@Schema(description = "数据产品唯一标识")
private String dataProductGuid;
/**
* 需求开始时间
*/
@Schema(description = "需求开始时间")
......@@ -55,16 +62,17 @@ public class DemandRQVO {
private String requirementContent;
/**
* 数据需求字段 数据格式:[{"name":"","path":""},{"name":"","path":""}]
* 数据需求字段【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Schema(description = "数据需求字段 数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]")
@Schema(description = "数据需求字段【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
private String dataDemandFieldAttachJson;
/**
* 期望交付时间
*/
@Schema(description = "期望交付时间")
private BigDecimal deliveryTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date deliveryTime;
/**
* 最低预算
......@@ -85,15 +93,15 @@ public class DemandRQVO {
private String costSource;
/**
* 更新周期
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Schema(description = "更新周期")
@Schema(description = "更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径方式 (1 接口调用;2 文件下载)
* 获取路径方式
*/
@Schema(description = "获取路径方式 (1 接口调用;2 文件下载)")
@Schema(description = "获取路径方式")
private String requestType;
/**
......@@ -144,6 +152,56 @@ public class DemandRQVO {
@Schema(description = "联系方式")
private String contactInformation;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
private String bizApproveState;
/**
* 加工单生成时间
*/
@Schema(description = "加工单生成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date processingGenerateTime;
/**
* 验收完成时间
*/
@Schema(description = "验收完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date acceptFinishTime;
/**
* 完成周期
*/
@Schema(description = "完成周期")
private Integer finishCycle;
/**
* 资源获取状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "资源获取状态【N未开始 A进行中 Y已完成】")
private String resourceAcquisitionState;
/**
* 产品加工状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "产品加工状态【N未开始 A进行中 Y已完成】")
private String productProcessingState;
/**
* 产品交付状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "产品交付状态【N未开始 A进行中 Y已完成】")
private String productDeliveryState;
/**
* 产品验收状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "产品验收状态【N未开始 A进行中 Y已完成】")
private String productAcceptState;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
......
package com.csbr.qingcloud.domain.vo;
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 返回参数
* @author: xushaobo
* @create: 2024-12-30 16:29
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求返回参数
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Data
@Schema(title = "返回参数")
@Schema(title = "数据需求返回参数")
public class DemandRSVO {
/**
......@@ -29,12 +30,24 @@ public class DemandRSVO {
private String dataDemandName;
/**
* 需求类型 (1 产业端;2 科研端;3 临床端)
* 需求类型
*/
@Schema(description = "需求类型 (1 产业端;2 科研端;3 临床端)")
@Schema(description = "需求类型")
private String requirementType;
/**
* 需求分类【1新增 2调整】
*/
@Schema(description = "需求分类【1新增 2调整】")
private String demandCategory;
/**
* 数据产品唯一标识
*/
@Schema(description = "数据产品唯一标识")
private String dataProductGuid;
/**
* 需求开始时间
*/
@Schema(description = "需求开始时间")
......@@ -55,16 +68,17 @@ public class DemandRSVO {
private String requirementContent;
/**
* 数据需求字段 数据格式:[{"name":"","path":""},{"name":"","path":""}]
* 数据需求字段【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Schema(description = "数据需求字段 数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]")
@Schema(description = "数据需求字段【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
private String dataDemandFieldAttachJson;
/**
* 期望交付时间
*/
@Schema(description = "期望交付时间")
private BigDecimal deliveryTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date deliveryTime;
/**
* 最低预算
......@@ -85,15 +99,15 @@ public class DemandRSVO {
private String costSource;
/**
* 更新周期
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Schema(description = "更新周期")
@Schema(description = "更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径方式 (1 接口调用;2 文件下载)
* 获取路径方式
*/
@Schema(description = "获取路径方式 (1 接口调用;2 文件下载)")
@Schema(description = "获取路径方式")
private String requestType;
/**
......@@ -144,10 +158,66 @@ public class DemandRSVO {
@Schema(description = "联系方式")
private String contactInformation;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
private String bizApproveState;
/**
* 加工单生成时间
*/
@Schema(description = "加工单生成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date processingGenerateTime;
/**
* 验收完成时间
*/
@Schema(description = "验收完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date acceptFinishTime;
/**
* 完成周期
*/
@Schema(description = "完成周期")
private Integer finishCycle;
/**
* 资源获取状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "资源获取状态【N未开始 A进行中 Y已完成】")
private String resourceAcquisitionState;
/**
* 产品加工状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "产品加工状态【N未开始 A进行中 Y已完成】")
private String productProcessingState;
/**
* 产品交付状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "产品交付状态【N未开始 A进行中 Y已完成】")
private String productDeliveryState;
/**
* 产品验收状态【N未开始 A进行中 Y已完成】
*/
@Schema(description = "产品验收状态【N未开始 A进行中 Y已完成】")
private String productAcceptState;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/**
* 审批信息
*/
@Schema(description = "审批信息")
private BizApproveVO approveVO;
/******** 子对象 *****/
}
......
package com.csbr.qingcloud.mybatis.entity;
package com.csbr.qingcloud.portal.mybatis.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import csbr.cloud.entity.domain.base.dao.BaseShardingDO;
import jdk.jfr.Name;
import lombok.Data;
......@@ -9,15 +11,15 @@ import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 实体
* @author: xushaobo
* @create: 2024-12-30 16:26
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求实体
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("")
@Name("数据需求")
public class MfDemand extends BaseShardingDO {
/**
......@@ -27,12 +29,24 @@ public class MfDemand extends BaseShardingDO {
private String dataDemandName;
/**
* 需求类型 (1 产业端;2 科研端;3 临床端)
* 需求类型
*/
@Name("需求类型 (1 产业端;2 科研端;3 临床端)")
@Name("需求类型")
private String requirementType;
/**
* 需求分类【1新增 2调整】
*/
@Name("需求分类【1新增 2调整】")
private String demandCategory;
/**
* 数据产品唯一标识
*/
@Name("数据产品唯一标识")
private String dataProductGuid;
/**
* 需求开始时间
*/
@Name("需求开始时间")
......@@ -51,16 +65,17 @@ public class MfDemand extends BaseShardingDO {
private String requirementContent;
/**
* 数据需求字段 数据格式:[{"name":"","path":""},{"name":"","path":""}]
* 数据需求字段【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Name("数据需求字段 数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]")
@Name("数据需求字段【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String dataDemandFieldAttachJson;
/**
* 期望交付时间
*/
@Name("期望交付时间")
private BigDecimal deliveryTime;
private Date deliveryTime;
/**
* 最低预算
......@@ -81,15 +96,15 @@ public class MfDemand extends BaseShardingDO {
private String costSource;
/**
* 更新周期
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Name("更新周期")
@Name("更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径方式 (1 接口调用;2 文件下载)
* 获取路径方式
*/
@Name("获取路径方式 (1 接口调用;2 文件下载)")
@Name("获取路径方式")
private String requestType;
/**
......@@ -139,5 +154,53 @@ public class MfDemand extends BaseShardingDO {
*/
@Name("联系方式")
private String contactInformation;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Name("业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
private String bizApproveState;
/**
* 加工单生成时间
*/
@Name("加工单生成时间")
private Date processingGenerateTime;
/**
* 验收完成时间
*/
@Name("验收完成时间")
private Date acceptFinishTime;
/**
* 完成周期
*/
@Name("完成周期")
private Integer finishCycle;
/**
* 资源获取状态【N未开始 A进行中 Y已完成】
*/
@Name("资源获取状态【N未开始 A进行中 Y已完成】")
private String resourceAcquisitionState;
/**
* 产品加工状态【N未开始 A进行中 Y已完成】
*/
@Name("产品加工状态【N未开始 A进行中 Y已完成】")
private String productProcessingState;
/**
* 产品交付状态【N未开始 A进行中 Y已完成】
*/
@Name("产品交付状态【N未开始 A进行中 Y已完成】")
private String productDeliveryState;
/**
* 产品验收状态【N未开始 A进行中 Y已完成】
*/
@Name("产品验收状态【N未开始 A进行中 Y已完成】")
private String productAcceptState;
}
......
package com.csbr.qingcloud.mybatis.mapper;
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.mybatis.entity.MfDemand;
import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: Mapper 接口
* @author: xushaobo
* @create: 2024-12-30 16:29
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求 Mapper 接口
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Mapper
public interface MfDemandMapper extends BaseMapper<MfDemand> {
......
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求逻辑层接口
* @author: xcq
* @create: 2024-12-31 18:46
**/
public interface MfDemandService extends CsbrService<MfDemand> {
}
package com.csbr.qingcloud.mybatis.service.impl;
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.mybatis.mapper.MfDemandMapper;
import com.csbr.qingcloud.mybatis.entity.MfDemand;
import com.csbr.qingcloud.mybatis.service.MfDemandService;
import com.csbr.qingcloud.portal.mybatis.mapper.MfDemandMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
import com.csbr.qingcloud.portal.mybatis.service.MfDemandService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 逻辑层接口实现
* @author: xushaobo
* @create: 2024-12-30 16:29
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求逻辑层接口实现
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Service
public class MfDemandServiceImpl extends CsbrServiceImpl<MfDemandMapper, MfDemand> implements MfDemandService {
......
package com.csbr.qingcloud.portal.service;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
import com.csbr.qingcloud.portal.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.portal.domain.vo.DemandRSVO;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求业务逻辑接口
* @author: xcq
* @create: 2024-12-31 18:46
**/
public interface DemandService {
/**
* 数据需求分页查询
* @author xcq
* @date 2024-12-31 18:46
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.DemandRSVO>
*/
PageListVO<DemandRSVO> pageList(DemandQueryVO queryVO);
/**
* 数据需求获取详情数据
* @author xcq
* @date 2024-12-31 18:46
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.DemandRSVO
*/
DemandRSVO getDemandDetail(String guid);
/**
* 数据需求数据新增
* @author xcq
* @date 2024-12-31 18:46
* @param flowBaseVO
* @return void
*/
void saveDemand(FlowRQBaseVO flowBaseVO);
/**
* 数据需求数据修改
* @author xcq
* @date 2024-12-31 18:46
* @param flowBaseVO
* @return void
*/
void updateDemand(FlowRQBaseVO flowBaseVO);
/**
* 数据需求数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-31 18:46
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-31 18:46
* @param dto
* @return void
*/
void flowCallBack(BizCallbackDTO dto);
}
package com.csbr.qingcloud.service.impl;
package com.csbr.qingcloud.portal.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.enums.WorkFlowBizEnum;
import csbr.cloud.entity.enums.ApprovalStateEnum;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.util.CommonUtil;
import com.csbr.cloud.common.util.CsbrBeanUtil;
import com.csbr.cloud.workflow.util.ApprovalFlowUtil;
import com.csbr.cloud.workflow.util.FlowAbstractImpl;
import com.csbr.cloud.common.util.MessageSourceUtil;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.domain.vo.DemandRQVO;
import com.csbr.qingcloud.domain.vo.DemandRSVO;
import com.csbr.qingcloud.mybatis.entity.MfDemand;
import com.csbr.qingcloud.mybatis.service.MfDemandService;
import com.csbr.qingcloud.service.DemandService;
import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.portal.domain.vo.DemandRQVO;
import com.csbr.qingcloud.portal.domain.vo.DemandRSVO;
import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
import com.csbr.qingcloud.portal.mybatis.service.MfDemandService;
import com.csbr.qingcloud.portal.service.DemandService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
......@@ -25,53 +34,66 @@ import java.util.Collections;
import java.util.List;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 业务逻辑实现
* @author: xushaobo
* @create: 2024-12-30 16:30
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求业务逻辑实现
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Slf4j
@Service
public class DemandServiceImpl implements DemandService {
public class DemandServiceImpl extends FlowAbstractImpl implements DemandService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "";
private static final String FUNCTION_NAME = "数据需求";
/**
* 流程类型
*/
private static final String FLOW_TYPE = WorkFlowBizEnum.FLOW_TYPE.getValue();
@Resource
private MfDemandService mfDemandService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private ApprovalFlowUtil approvalFlowUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
/**
* 分页查询
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求分页查询
* @author xcq
* @date 2024-12-31 18:46
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.domain.vo.DemandRSVO>
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.DemandRSVO>
*/
@Override
public PageListVO<DemandRSVO> pageList(DemandQueryVO queryVO) {
beforeQuery(queryVO);
LambdaQueryWrapper<MfDemand> queryWrapper = mfDemandService.csbrQueryWrapper(queryVO, MfDemand.class);
queryWrapper.orderByDesc(MfDemand::getCreateTime);
PageListVO<MfDemand> pageList = mfDemandService.csbrPageList(queryVO, queryWrapper);
PageListVO<DemandRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
if (queryVO.getIsNeedQuery()) {
LambdaQueryWrapper<MfDemand> queryWrapper = mfDemandService.csbrQueryWrapper(queryVO, MfDemand.class);
queryWrapper.in(CollectionUtils.isNotEmpty(queryVO.getGuidList()), MfDemand::getGuid,
queryVO.getGuidList());
queryWrapper.orderByDesc(MfDemand::getCreateTime);
PageListVO<MfDemand> pageList = mfDemandService.csbrPageList(queryVO, queryWrapper);
PageListVO<DemandRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
return new PageListVO<>();
}
/**
* 获取详情数据
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求获取详情数据
* @author xcq
* @date 2024-12-31 18:46
* @param guid
* @return com.csbr.qingcloud.domain.vo.DemandRSVO
* @return com.csbr.qingcloud.portal.domain.vo.DemandRSVO
*/
@Override
public DemandRSVO getDemandDetail(String guid) {
......@@ -88,52 +110,96 @@ public class DemandServiceImpl implements DemandService {
}
/**
* 数据新增
* @author xushaobo
* @date 2024-12-30 16:30
* @param rqVO
* @return boolean
* 数据需求数据新增
* @author xcq
* @date 2024-12-31 18:46
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void saveDemand(DemandRQVO rqVO) {
public void saveDemand(FlowRQBaseVO flowBaseVO) {
DemandRQVO rqVO = (DemandRQVO) flowBaseVO;
beforeSave(rqVO);
MfDemand entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
super.startWorkFlow(rqVO, approvalDTO, entity::setBizApproveState);
// 业务数据保存
boolean flag = mfDemandService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(FUNCTION_NAME));
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(rqVO, entity);
afterSave(entity, rqVO);
}
/**
* 数据修改
* @author xushaobo
* @date 2024-12-30 16:30
* @param rqVO
* @return boolean
* 数据需求数据修改
* @author xcq
* @date 2024-12-31 18:46
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void updateDemand(DemandRQVO rqVO) {
beforeUpdate(rqVO);
public void updateDemand(FlowRQBaseVO flowBaseVO) {
DemandRQVO rqVO = (DemandRQVO) flowBaseVO;
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
// MfDemand oldEntity = mfDemandService.getById(rqVO.getGuid());
beforeUpdate(rqVO);
MfDemand entity = convertToEntity(rqVO);
boolean flag = mfDemandService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(FUNCTION_NAME));
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
super.startOrRestartWorkFlow(rqVO, rqVO.getBizApproveState(), approvalDTO, entity::setBizApproveState);
if (rqVO.getIsRestart()) {
// 重新提交
againSubmitFlow(entity, rqVO, approvalDTO);
} else {
// 修改业务数据
boolean flag = mfDemandService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(entity, rqVO);
}
afterUpdate(rqVO, entity);
}
/**
* 重新提交数据需求
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @param rqVO
* @param approvalDTO
* @return void
*/
private void againSubmitFlow(MfDemand entity, DemandRQVO rqVO, AddApprovalDTO approvalDTO) {
// 重新提交的数据重置相关字段
entity.setGuid(CommonUtil.newGuid());
mfDemandService.csbrBaseEntity(entity);
// 保存新数据
boolean flag = mfDemandService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(String.format("重新提交%s",FUNCTION_NAME)));
}
// 发起新的流程
approvalDTO.setGuid(entity.getGuid());
approvalFlowUtil.addApproval(approvalDTO);
afterSave(entity, rqVO);
}
/**
* 数据删除
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-31 18:46
* @param guids
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(List<String> guids) {
......@@ -142,30 +208,6 @@ public class DemandServiceImpl implements DemandService {
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
if (!mfDemandService.isExistsData(guids, MfDemand.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
boolean flag = mfDemandService.csbrDeleteData(guids, MfDemand.class);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
}
/**
* 数据删除、并有相关的处理操作
* @author xushaobo
* @date 2024-12-30 16:30
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeHandleByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
for (String guid : guids) {
MfDemand entity = mfDemandService.getById(guid);
beforeRemove(entity);
......@@ -175,12 +217,63 @@ public class DemandServiceImpl implements DemandService {
}
afterRemove(entity);
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
}
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-31 18:46
* @param dto
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void flowCallBack(BizCallbackDTO dto) {
MfDemand entity = mfDemandService.getById(dto.getBizGuid());
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(FUNCTION_NAME));
}
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState())) {
// todo
}
// 同步更新审批状态
LambdaUpdateWrapper<MfDemand> updateWrapper = mfDemandService.csbrUpdateWrapper(MfDemand.class);
updateWrapper.set(MfDemand::getBizApproveState, dto.getApprovalState());
updateWrapper.eq(MfDemand::getGuid, dto.getBizGuid());
boolean flag = mfDemandService.update(updateWrapper);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(String.format("%s的业务审批状态", FUNCTION_NAME)));
}
}
/**
* 获取发起流程参数
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @return com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO
*/
private AddApprovalDTO getAddApprovalDTO(MfDemand entity) {
AddApprovalDTO approvalDTO = new AddApprovalDTO(FLOW_TYPE, entity.getGuid());
// todo
approvalDTO.setFuncCode(SysFuncCode);
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(null);
// 流程列表数据核心param参数处理
approvalDTO.setParam1(null);
approvalDTO.setParam2(null);
approvalDTO.setParam3(null);
approvalDTO.setParam4(null);
return approvalDTO;
}
/**
* 新新增前置处理
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求新新增前置处理
* @author xcq
* @date 2024-12-31 18:46
* @param rqVO
* @return void
*/
......@@ -220,26 +313,26 @@ public class DemandServiceImpl implements DemandService {
}
/**
* 新增后置处理
* @author xushaobo
* @date 2024-12-30 16:30
* @param rqVO
* 数据需求新增后置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @param rqVO
* @return void
*/
private void afterSave(DemandRQVO rqVO, MfDemand entity) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
private void afterSave(MfDemand entity, DemandRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 修改前置校验、处理
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求修改前置校验、处理
* @author xcq
* @date 2024-12-31 18:46
* @param rqVO
* @return void
*/
......@@ -256,8 +349,12 @@ public class DemandServiceImpl implements DemandService {
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
if (!mfDemandService.isExistsData(Collections.singletonList(rqVO.getGuid()), MfDemand.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
LambdaQueryWrapper<MfDemand> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfDemand::getGuid, rqVO.getGuid());
queryWrapper.select(MfDemand::getGuid, MfDemand::getBizApproveState);
MfDemand entity = mfDemandService.getOne(queryWrapper);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
}
//endregion 2.2.业务数据验证
......@@ -266,6 +363,7 @@ public class DemandServiceImpl implements DemandService {
//region 3.数据转换处理
//region 3.1.数据过程转换
rqVO.setBizApproveState(entity.getBizApproveState());
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
......@@ -285,14 +383,14 @@ public class DemandServiceImpl implements DemandService {
}
/**
* 修改后置处理
* @author xushaobo
* @date 2024-12-30 16:30
* @param rqVO
* 数据需求修改后置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @param rqVO
* @return void
*/
protected void afterUpdate(DemandRQVO rqVO, MfDemand entity) {
protected void afterUpdate(MfDemand entity, DemandRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
......@@ -303,9 +401,9 @@ public class DemandServiceImpl implements DemandService {
/**
* 删除前置处理
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求删除前置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @return void
*/
......@@ -313,12 +411,16 @@ public class DemandServiceImpl implements DemandService {
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
if (ApprovalStateEnum.CHECKING.getValue().equals(entity.getBizApproveState()) ||
ApprovalStateEnum.PASSED.getValue().equals(entity.getBizApproveState())) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, "审批中和审批通过的数据不能删除!");
}
}
/**
* 删除后置处理
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求删除后置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @return void
*/
......@@ -327,20 +429,29 @@ public class DemandServiceImpl implements DemandService {
}
/**
* 查询方法前置验证、处理
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求查询方法前置验证、处理
* @author xcq
* @date 2024-12-31 18:46
* @param rqQueryVO
* @return void
*/
private void beforeQuery(DemandQueryVO rqQueryVO) {
rqQueryVO.setIsNeedQuery(true);
if (approvalFlowUtil.isQueryBizGuid(rqQueryVO)) {
rqQueryVO.setFlowType(FLOW_TYPE);
List<String> bizGuidList = approvalFlowUtil.getApprovalBizGuids(rqQueryVO);
if (CollectionUtils.isEmpty(bizGuidList)) {
rqQueryVO.setIsNeedQuery(false);
} else {
rqQueryVO.setGuidList(bizGuidList);
}
}
}
/**
* 查询方法后置数据转换、处理
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求查询方法后置数据转换、处理
* @author xcq
* @date 2024-12-31 18:46
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
......@@ -363,11 +474,11 @@ public class DemandServiceImpl implements DemandService {
//region 辅助操作
/**
* 实体数据转换为视图对象数据(多个)
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求实体数据转换为视图对象数据(多个)
* @author xcq
* @date 2024-12-31 18:46
* @param entityList 实体数据列表
* @return java.util.List<com.csbr.qingcloud.domain.vo.DemandRSVO> 视图对象列表
* @return java.util.List<com.csbr.qingcloud.portal.domain.vo.DemandRSVO> 视图对象列表
*/
private List<DemandRSVO> convertToVO(List<MfDemand> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
......@@ -384,23 +495,25 @@ public class DemandServiceImpl implements DemandService {
}
/**
* 实体数据转换为视图对象数据
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求实体数据转换为视图对象数据
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @return com.csbr.qingcloud.domain.vo.DemandRSVO
* @return com.csbr.qingcloud.portal.domain.vo.DemandRSVO
*/
private DemandRSVO convertToVO(MfDemand entity) {
DemandRSVO vo = csbrBeanUtil.convert(entity, DemandRSVO.class);
//流程数据处理
vo.setApproveVO(approvalFlowUtil.getApprovalInfo(entity.getGuid()));
return vo;
}
/**
* 新增、修改和其他情况的参数转换为实体
* @author xushaobo
* @date 2024-12-30 16:30
* 数据需求新增、修改和其他情况的参数转换为实体
* @author xcq
* @date 2024-12-31 18:46
* @param vo
* @return com.csbr.qingcloud.mybatis.entity.MfDemand
* @return com.csbr.qingcloud.portal.mybatis.entity.MfDemand
*/
private MfDemand convertToEntity(DemandRQVO vo) {
MfDemand entity = csbrBeanUtil.convert(vo, MfDemand.class);
......
package com.csbr.qingcloud.service;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.domain.vo.DemandRQVO;
import com.csbr.qingcloud.domain.vo.DemandRSVO;
import java.util.List;
/**
* @program: D:/csbr/sjzc/ms-data-circulation-portal-service
* @description: 业务逻辑接口
* @author: xushaobo
* @create: 2024-12-30 16:31
**/
public interface DemandService {
/**
* 分页查询
* @author xushaobo
* @date 2024-12-30 16:31
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.domain.vo.DemandRSVO>
*/
PageListVO<DemandRSVO> pageList(DemandQueryVO queryVO);
/**
* 获取详情数据
* @author xushaobo
* @date 2024-12-30 16:31
* @param guid
* @return com.csbr.qingcloud.domain.vo.DemandRSVO
*/
DemandRSVO getDemandDetail(String guid);
/**
* 数据新增
* @author xushaobo
* @date 2024-12-30 16:31
* @param rqVO
* @return boolean
*/
void saveDemand(DemandRQVO rqVO);
/**
* 数据修改
* @author xushaobo
* @date 2024-12-30 16:31
* @param rqVO
* @return boolean
*/
void updateDemand(DemandRQVO rqVO);
/**
* 数据删除
* @author xushaobo
* @date 2024-12-30 16:31
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 数据删除、并有相关的处理操作
* @author xushaobo
* @date 2024-12-30 16:31
* @param guids
* @return void
*/
void removeHandleByGuids(List<String> guids);
}
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!