2dd45760 by xiaojie

Merge branch 'develop' into 'master'

合并代码

See merge request !4
2 parents 8f0eb5d7 fcb36ea3
Showing 82 changed files with 7979 additions and 89 deletions
......@@ -36,11 +36,11 @@
<artifactId>csbr-cloud-base</artifactId>
<version>${cabr-package.version}</version>
</dependency>
<dependency>
<!-- <dependency>
<groupId>com.csbr.qingcloud</groupId>
<artifactId>csbr-cloud-log</artifactId>
<version>${cabr-package.version}</version>
</dependency>
</dependency>-->
<dependency>
<groupId>com.csbr.qingcloud</groupId>
<artifactId>csbr-cloud-mybatis</artifactId>
......@@ -92,6 +92,8 @@
<exclude>release/*</exclude>
<exclude>develop/*</exclude>
<exclude>release-test/*</exclude>
<exclude>zq-release/*</exclude>
<exclude>enterprise-release/*</exclude>
</excludes>
<!--开启过滤器,此处不能忽略!-->
<filtering>true</filtering>
......@@ -207,6 +209,78 @@
<subPath>project</subPath>
</properties>
</profile>
<profile>
<id>zq-production-daop-master</id>
<properties>
<profileActive>zq-release</profileActive>
<subPath></subPath>
</properties>
</profile>
<profile>
<id>zq-production-daop-lt</id>
<properties>
<profileActive>zq-release</profileActive>
<subPath>lt</subPath>
</properties>
</profile>
<profile>
<id>zq-production-daop-zcgl</id>
<properties>
<profileActive>zq-release</profileActive>
<subPath>zcgl</subPath>
</properties>
</profile>
<profile>
<id>zq-production-daop-jgjf</id>
<properties>
<profileActive>zq-release</profileActive>
<subPath>jgjf</subPath>
</properties>
</profile>
<profile>
<id>zq-production-daop-project</id>
<properties>
<profileActive>zq-release</profileActive>
<subPath>project</subPath>
</properties>
</profile>
<profile>
<id>enterprise-production-daop-master</id>
<properties>
<profileActive>enterprise-release</profileActive>
<subPath></subPath>
</properties>
</profile>
<profile>
<id>enterprise-production-daop-lt</id>
<properties>
<profileActive>enterprise-release</profileActive>
<subPath>lt</subPath>
</properties>
</profile>
<profile>
<id>enterprise-production-daop-zcgl</id>
<properties>
<profileActive>enterprise-release</profileActive>
<subPath>zcgl</subPath>
</properties>
</profile>
<profile>
<id>enterprise-production-daop-jgjf</id>
<properties>
<profileActive>enterprise-release</profileActive>
<subPath>jgjf</subPath>
</properties>
</profile>
<profile>
<id>enterprise-production-daop-project</id>
<properties>
<profileActive>enterprise-release</profileActive>
<subPath>project</subPath>
</properties>
</profile>
</profiles>
</project>
......
package com.csbr.qingcloud.portal.controller;
import com.csbr.cloud.common.entity.CsbrUpdate;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.domain.vo.*;
import csbr.cloud.entity.annotation.SystemLog;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
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;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求-控制器
* @author: xcq
* @create: 2024-12-31 18:46
**/
@RestController
@RequestMapping("/demand")
@Tag(name = "数据需求-控制器")
public class DemandController {
@Resource
private DemandService demandService;
//region 基本操作
@PostMapping("/save")
@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 = "数据需求-修改")
public CommonRes<Boolean> updateDemand(@RequestBody @Valid DemandRQVO vo) {
demandService.updateDemand(vo);
return CommonRes.success(true);
}
@PostMapping("/update-grounding-pick")
@Operation(summary= "数据需求-修改上架状态")
public CommonRes<Boolean> updateGroundingPick(@Validated(value = {CsbrUpdate.class})@RequestBody @Valid DemandRQVO vo) {
return CommonRes.success(demandService.updateGroundingPick(vo));
}
@DeleteMapping("/delete")
@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 = "数据需求-分页")
public CommonRes<PageListVO<DemandRSVO>> pageList(@RequestBody @Valid DemandQueryVO queryVO) {
PageListVO<DemandRSVO> pageVO = demandService.pageList(queryVO);
return CommonRes.success(pageVO);
}
@PostMapping("/portal/page-list")
@SystemLog(value = "数据需求-门户分页")
@Operation(summary = "数据需求-门户分页")
public CommonRes<PageListVO<DemandPortalRSVO>> portalPageList(@RequestBody @Valid DemandPortalQueryVO queryVO) {
PageListVO<DemandPortalRSVO> pageVO = demandService.portalPageList(queryVO);
return CommonRes.success(pageVO);
}
@GetMapping("/detail")
@SystemLog(value = "数据需求-详情")
@Operation(summary = "数据需求-详情",parameters = {
@Parameter(name = "guid", description = "数据需求唯一标识", required = true)})
public CommonRes<DemandRSVO> getDemandDetail(@RequestParam String guid) {
DemandRSVO vo = demandService.getDemandDetail(guid);
return CommonRes.success(vo);
}
@GetMapping("/detail-by-process")
@SystemLog(value = "按加工单查数据需求详情")
@Operation(summary = "按加工单查数据需求详情",parameters = {
@Parameter(name = "processOrderNo", description = "加工单单号", required = true)})
public CommonRes<DemandRSVO> getDemandDetailByProcess(@RequestParam String processOrderNo) {
DemandRSVO vo = demandService.getDemandDetailByProcess(processOrderNo);
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);
}
@PostMapping("/cross-flow-call-back")
@SystemLog(value = "数据需求-流程结束后进行业务回调(跨服务审批)")
@Operation(summary = "数据需求-流程结束后进行业务回调(跨服务审批)", hidden = true)
public CommonRes<Boolean> crossFlowCallBack(@RequestBody @Valid BizCallbackDTO dto) {
demandService.crossFlowCallBack(dto);
return CommonRes.success(true);
}
@PostMapping("/last-approve")
@SystemLog(value = "数据需求审批")
@Operation(summary = "数据需求审批-最后一个节点时调用")
public CommonRes<Boolean> lastApprove(@RequestBody DemandApproveVO dto) {
Boolean vo = demandService.lastApprove(dto);
return CommonRes.success(vo);
}
@PostMapping("/process-order-list")
@Operation(summary = "查询加工单列表")
public CommonRes<List<ProcessOrderProcessDtlRSVO>> listByProcessOrderNo() {
List<ProcessOrderProcessDtlRSVO> pageVO = demandService.listByProcessOrderNo();
return CommonRes.success(pageVO);
}
//endregion
}
package com.csbr.qingcloud.portal.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.cloud.workflow.domain.dto.appove.FlowQueryDTO;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
import com.csbr.qingcloud.portal.domain.vo.*;
import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService;
import csbr.cloud.entity.annotation.SystemLog;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.service.EnterpriseService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息-控制器
* @author: xcq
* @create: 2024-12-26 16:18
**/
@RestController
@RequestMapping("/enterprise")
@Tag(name = "企业信息-控制器")
public class EnterpriseController {
@Resource
private EnterpriseService enterpriseService;
@Resource
private EnterpriseChangeApproveService enterpriseChangeApproveService;
//region 基本操作
@PostMapping("/save")
@SystemLog(value = "企业信息-新增")
@Operation(summary = "企业信息-新增")
public CommonRes<Boolean> saveEnterprise(@RequestBody @Valid EnterpriseRQVO vo) {
enterpriseService.saveEnterprise(vo);
return CommonRes.success(true);
}
@PutMapping("/update")
@SystemLog(value = "企业信息-修改")
@Operation(summary = "企业信息-修改")
public CommonRes<Boolean> updateEnterprise(@RequestBody @Valid EnterpriseRQVO vo) {
enterpriseService.updateEnterprise(vo);
return CommonRes.success(true);
}
@DeleteMapping("/delete")
@SystemLog(value = "企业信息-批量删除")
@Operation(summary = "企业信息-批量删除")
public CommonRes<Boolean> removeByGuids(@RequestBody List<String> guids) {
enterpriseService.removeByGuids(guids);
return CommonRes.success(true);
}
@PostMapping("/page-list")
@SystemLog(value = "企业信息-分页")
@Operation(summary = "企业信息-分页")
public CommonRes<PageListVO<EnterpriseRSVO>> pageList(@RequestBody @Valid EnterpriseQueryVO queryVO) {
PageListVO<EnterpriseRSVO> pageVO = enterpriseService.pageList(queryVO);
return CommonRes.success(pageVO);
}
@PostMapping("/flow/page-list")
@SystemLog(value = "企业信息-分页(调用流程)")
@Operation(summary = "企业信息-分页(调用流程)")
public CommonRes<PageListVO<EnterpriseApproveRSVO>> flowPageList(@RequestBody @Valid FlowQueryDTO dto) {
PageListVO<EnterpriseApproveRSVO> pageVO = enterpriseService.flowPageList(dto);
return CommonRes.success(pageVO);
}
@GetMapping("/detail")
@SystemLog(value = "企业信息-详情")
@Operation(summary = "企业信息-详情",
parameters = {@Parameter(name = "guid", description = "企业信息唯一标识", required = true)} )
public CommonRes<EnterpriseRSVO> getEnterpriseDetail(@RequestParam String guid) {
EnterpriseRSVO vo = enterpriseChangeApproveService.getEnterpriseChangeDetail(guid);
return CommonRes.success(vo);
}
@GetMapping("/detail-by-logonUser")
@SystemLog(value = "企业信息-根据登陆账号查询详情")
@Operation(summary = "企业信息-根据登陆账号查询详情",
parameters = {@Parameter(name = "logonUser", description = "登陆账号", required = true)} )
public CommonRes<EnterpriseRSVO> getEnterpriseDetailByLogonUser(@RequestParam String logonUser) {
EnterpriseRSVO vo = enterpriseService.getEnterpriseDetailByLogonUser(logonUser);
return CommonRes.success(vo);
}
@GetMapping("/detail-by-name")
@SystemLog(value = "按名称查企业信息详情")
@Operation(summary = "按名称查企业信息详情",
parameters = {@Parameter(name = "tenantName", description = "企业名称", required = true)} )
public CommonRes<EnterpriseRSVO> getEnterpriseDetailByName(@RequestParam String tenantName) {
EnterpriseRSVO vo = enterpriseService.getEnterpriseDetailByName(tenantName);
return CommonRes.success(vo);
}
@PostMapping("/flow-call-back")
@SystemLog(value = "企业信息-流程结束后进行业务回调")
@Operation(summary = "企业信息-流程结束后进行业务回调", hidden = true)
public CommonRes<Boolean> flowCallBack(@RequestBody @Valid BizCallbackDTO dto) {
enterpriseService.flowCallBack(dto);
return CommonRes.success(true);
}
@PostMapping("/cross-flow-call-back")
@SystemLog(value = "企业信息-流程结束后进行业务回调(跨服务审批)")
@Operation(summary = "企业信息-流程结束后进行业务回调(跨服务审批)", hidden = true)
public CommonRes<Boolean> crossFlowCallBack(@RequestBody @Valid BizCallbackDTO dto) {
enterpriseService.crossFlowCallBack(dto);
return CommonRes.success(true);
}
@PostMapping("/move-old-data")
@SystemLog(value = "将此账号提交的数据需求迁移到新的企业")
@Operation(summary = "将此账号提交的数据需求迁移到新的企业", hidden = true)
public CommonRes<Boolean> moveOldData(@RequestBody @Valid TenantRQVO vo) {
enterpriseService.moveOldData(vo);
return CommonRes.success(true);
}
//endregion
//region 变更申请
/**
* 前置校验
*/
@PostMapping("/check")
@SystemLog(value = "前置校验")
@Operation(summary = "前置校验")
public CommonRes<Boolean> check(@RequestBody EnterpriseRQVO vo) {
Boolean result = enterpriseService.check(vo);
return CommonRes.success(result);
}
@PostMapping("/change/update")
@SystemLog(value = "变更审批-最终更新")
@Operation( summary = "变更审批-最终更新" )
public CommonRes<Boolean> changeUpdate(@RequestBody BizCallbackDTO dto) {
enterpriseChangeApproveService.changeUpdate(dto);
return CommonRes.success(true);
}
@PostMapping("/change/cross-flow-call-back")
@SystemLog(value = "变更审批-最终更新(跨平台)")
@Operation( summary = "变更审批-最终更新(跨平台)" )
public CommonRes<Boolean> changeCrossFlowCallBack(@RequestBody BizCallbackDTO dto) {
enterpriseChangeApproveService.crossFlowCallBack(dto);
return CommonRes.success(true);
}
@PostMapping("/change/save")
@SystemLog(value = "变更申请-保存数据")
@Operation(summary = "变更申请-保存数据")
public CommonRes<Boolean> changeSave(@Validated @RequestBody ChangeApproveVO vo) {
enterpriseChangeApproveService.changeSave(vo);
return CommonRes.success(true);
}
@GetMapping("/change/detail")
@SystemLog(value = "变更申请-查询详情")
@Operation(summary = "变更申请-详情",parameters = { @Parameter(name = "guid", description = "申请唯一标识", required = true)})
public CommonRes<ChangeApproveVO> changeDetail(@RequestParam String guid) {
return CommonRes.success(enterpriseChangeApproveService.changeDetail(guid));
}
@DeleteMapping("/change/delete")
@SystemLog(value = "变更申请-批量删除")
@Operation(summary = "变更申请-批量删除")
public CommonRes<Boolean> changeRemoveByGuids(@RequestBody List<String> guids) {
enterpriseChangeApproveService.removeByGuids(guids);
return CommonRes.success(true);
}
@DeleteMapping("/change/cross-delete")
@SystemLog(value = "变更申请-批量删除(跨平台)")
@Operation(summary = "变更申请-批量删除(跨平台)", hidden = true)
public CommonRes<Boolean> crossRemoveByGuids(@RequestBody List<String> zqBizGuids) {
enterpriseChangeApproveService.crossRemoveByBizGuid(zqBizGuids);
return CommonRes.success(true);
}
//endregion
}
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.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.ServicerMaintainQueryVO;
import com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRQVO;
import com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO;
import com.csbr.qingcloud.portal.service.ServicerMaintainService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护-控制器
* @author: xcq
* @create: 2024-12-31 18:49
**/
@RestController
@RequestMapping("/servicer-maintain")
@Tag(name = "服务商维护-控制器")
public class ServicerMaintainController {
@Resource
private ServicerMaintainService servicerMaintainService;
//region 基本操作
@PostMapping("/save")
@SystemLog(value = "服务商维护-新增")
@Operation(summary = "服务商维护-新增")
public CommonRes<Boolean> saveServicerMaintain(@RequestBody @Valid ServicerMaintainRQVO vo) {
servicerMaintainService.saveServicerMaintain(vo);
return CommonRes.success(true);
}
@PutMapping("/update")
@SystemLog(value = "服务商维护-修改")
@Operation(summary = "服务商维护-修改")
public CommonRes<Boolean> updateServicerMaintain(@RequestBody @Valid ServicerMaintainRQVO vo) {
servicerMaintainService.updateServicerMaintain(vo);
return CommonRes.success(true);
}
@DeleteMapping("/delete")
@SystemLog(value = "服务商维护-批量删除")
@Operation(summary = "服务商维护-批量删除")
public CommonRes<Boolean> removeByGuids(@RequestBody List<String> guids) {
servicerMaintainService.removeByGuids(guids);
return CommonRes.success(true);
}
@PostMapping("/page-list")
@SystemLog(value = "服务商维护-分页")
@Operation(summary = "服务商维护-分页")
public CommonRes<PageListVO<ServicerMaintainRSVO>> pageList(@RequestBody @Valid ServicerMaintainQueryVO queryVO) {
PageListVO<ServicerMaintainRSVO> pageVO = servicerMaintainService.pageList(queryVO);
return CommonRes.success(pageVO);
}
@GetMapping("/detail")
@SystemLog(value = "服务商维护-详情")
@Operation(
summary = "服务商维护-详情",
parameters = {
@Parameter(name = "guid", description = "服务商维护唯一标识", required = true)}
)
public CommonRes<ServicerMaintainRSVO> getServicerMaintainDetail(@RequestParam String guid) {
ServicerMaintainRSVO vo = servicerMaintainService.getServicerMaintainDetail(guid);
return CommonRes.success(vo);
}
@PostMapping("/flow-call-back")
@SystemLog(value = "服务商维护-流程结束后进行业务回调")
@Operation(summary = "服务商维护-流程结束后进行业务回调", hidden = true)
public CommonRes<Boolean> flowCallBack(@RequestBody @Valid BizCallbackDTO dto) {
servicerMaintainService.flowCallBack(dto);
return CommonRes.success(true);
}
//endregion
}
package com.csbr.qingcloud.portal.domain.vo;
import lombok.Data;
/**
* @program: ms-user-scm-service
* @description: 行政区
* @author: yio
* @create: 2021-01-14 15:39
**/
@Data
public class BoroughPOJO {
private String code;
private String name;
private String parentId;
private String isPCapital;
private String isDeleted;
/** 城市等级 (0 一线城市,1 新一线城市,2 二线城市,3 三线城市,4 四线城市,5 五线城市,6 六线城市)*/
private String areaLevel;
}
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @program: ms-hc-workflow-service
* @description: 通用变更审批对象
* @author: XiaoCQ
* @create: 2024-01-20
**/
@Data
@Schema(name = "通用变更审批对象")
public class ChangeApproveVO {
/**
* 各变更业务唯一标识
*/
@Schema(description = "各变更业务唯一标识")
private String guid;
/**
* 审批流唯一标识
*/
@Schema(description = "审批流唯一标识")
private String approveGuid;
@Schema(description = "业务审批状态")
private String bizApproveState;
@Schema(description = "原审批流唯一标识")
private String sourceApproveGuid;
/**
* 源数据GUID
*/
@Schema(description = "源数据GUID")
private String sourceGuid;
/**
* 业务数据
*/
@Schema(description = "业务数据")
private String bizDataJson;
@Schema(description = "业务数据明细")
private String bizDataDetailJson;
/**
* 原业务数据
*/
@Schema(description = "原业务数据")
private String oldBizDataJson;
@Schema(description = "原业务数据明细")
private String oldBizDataDetailJson;
private String zqName;
private String zqBizGuid;
}
\ No newline at end of file
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description: 审批变更检查实体
* @author: XiaoCQ
* @create: 2025-02-20
*/
@Data
@Schema(name = "审批变更检查实体")
public class ChangeCheckDTO {
@Schema(description = "json")
private String json;
public ChangeCheckDTO(){
}
public ChangeCheckDTO(String json){
this.json = json;
}
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.vo.CsbrBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 变更信息视图对象类
*
* @author xiaocq
* @date 2024-12-30
*/
@Data
public class ChangeInfoVO extends CsbrBaseVO {
@Schema(description = "英文名称")
private String nameEn;
@Schema(description = "名称")
private String name;
@Schema(description = "日期")
private String date;
@Schema(description = "变更前")
private String before;
@Schema(description = "变更后")
private String after;
}
package com.csbr.qingcloud.portal.domain.vo;
import lombok.Data;
/** 对比对象 */
@Data
public class CompareResult {
/** 字段名 */
private String fieldName;
/** 旧值 */
private Object oldValue;
/** 新值 */
private Object newValue;
/** 字段中文名 */
private String fieldComment;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* 项目结项表 视图对象类
*
* @author xiaocq
* @date 2024-03-04
*/
@Data
@Accessors(chain = true)
@Schema(name = "项目结项审批传参")
public class DemandApproveVO extends FlowUpdateStateDTO {
@Schema(description = "业务唯一标识")
private String bizGuid;
@Schema(description = "合同附件")
private String contractAttachJson;
@Schema(description = "加工单位类型")
private String processCompanyType;
@Schema(description = "加工单位唯一标识")
private String processCompanyGuid;
@Schema(description = "加工单位名称")
private String processCompanyName;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.mybatis.annotations.LikeQuery;
import com.csbr.cloud.mybatis.enums.LikeQueryEnum;
import com.csbr.cloud.workflow.domain.dto.appove.FlowBizGuidQueryDTO;
import csbr.cloud.entity.domain.base.dto.BasePageDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
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 DemandPortalQueryVO extends BasePageDTO {
@Schema(description = "数据需求名称")
@LikeQuery(type = LikeQueryEnum.ALL)
private String dataDemandName;
@Schema(description = "需求类型")
private String requirementType;
@Schema(description = "交付标的")
private String updateCycle;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import csbr.cloud.entity.domain.base.vo.BaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求门户返回参数
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Data
@Schema(title = "数据需求门户返回参数")
public class DemandPortalRSVO extends BaseVO {
@Schema(description = "系统唯一标识")
private String guid;
@Schema(description = "数据需求名称")
private String dataDemandName;
@Schema(description = "需求类型")
private String requirementType;
@Schema(description = "需求开始时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermSdate;
@Schema(description = "需求结束时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermEdate;
@Schema(description = "最低预算")
private BigDecimal minBudget;
@Schema(description = "最高预算")
private BigDecimal maxBudget;
@Schema(description = "数据价格")
private String costSource;
@Schema(description = "需求内容")
private String requirementContent;
@Schema(description = "交付标的")
private String updateCycle;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.mybatis.annotations.LikeQuery;
import com.csbr.cloud.mybatis.enums.LikeQueryEnum;
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 {
@LikeQuery(type = LikeQueryEnum.ALL)
@Schema(description = "数据需求名称")
private String dataDemandName;
@Schema(description = "需求类型")
private String requirementType;
@Schema(description = "需求分类【1新增 2调整】")
private String demandCategory;
@LikeQuery(type = LikeQueryEnum.ALL)
@Schema(description = "发起人")
private String createUserName;
/**
* 业务审批状态【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.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 jdk.jfr.Name;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求新增、修改参数
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Data
@Schema(title = "数据需求新增、修改参数")
public class DemandRQVO extends FlowRQBaseVO {
/**
* 数据需求名称
*/
@Schema(description = "数据需求名称")
private String dataDemandName;
/**
* 需求类型
*/
@Schema(description = "需求类型")
private String requirementType;
@Schema(title = "专区名称")
private String zqName;
/**
* 需求分类【1新增 2调整】
*/
@Schema(description = "需求分类【1新增 2调整】")
private String demandCategory;
/**
* 数据产品唯一标识
*/
@Schema(description = "数据产品唯一标识")
private String dataProductGuid;
/**
* 需求开始时间
*/
@Schema(description = "需求开始时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermSdate;
/**
* 需求结束时间
*/
@Schema(description = "需求结束时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermEdate;
/**
* 需求内容
*/
@Schema(description = "需求内容")
private String requirementContent;
/**
* 数据需求字段【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Schema(description = "数据需求字段【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
private String dataDemandFieldAttachJson;
/**
* 期望交付日期
*/
@Schema(description = "期望交付日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date deliveryTime;
/**
* 最低预算
*/
@Schema(description = "最低预算")
private BigDecimal minBudget;
/**
* 最高预算
*/
@Schema(description = "最高预算")
private BigDecimal maxBudget;
/**
* 费用来源
*/
@Schema(description = "费用来源")
private String costSource;
/**
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Schema(description = "更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径方式
*/
@Schema(description = "获取路径方式")
private String requestType;
/**
* 场景名称
*/
@Schema(description = "场景名称")
private String sceneName;
/**
* 应用场景描述
*/
@Schema(description = "应用场景描述")
private String sceneDescription;
/**
* 数据质量要求
*/
@Schema(description = "数据质量要求")
private String qualityDemand;
/**
* 隐私合规要求
*/
@Schema(description = "隐私合规要求")
private String privacyDemand;
/**
* 其他补充内容
*/
@Schema(description = "其他补充内容")
private String otherContent;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 需求单位
*/
@Schema(description = "需求单位")
private String requirementUnit;
/**
* 联系方式
*/
@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", 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 String contractAttachJson;
@Schema(description = "加工单位类型")
private String processCompanyType;
@Schema(description = "加工单位唯一标识")
private String processCompanyGuid;
@Schema(description = "加工单位名称")
private String processCompanyName;
@Schema(title = "上架状态(Y 上架 N 下架)")
private String listingStatus;
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求返回参数
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Data
@Schema(title = "数据需求返回参数")
public class DemandRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 数据需求名称
*/
@Schema(description = "数据需求名称")
private String dataDemandName;
/**
* 需求类型
*/
@Schema(description = "需求类型")
private String requirementType;
/**
* 需求分类【1新增 2调整】
*/
@Schema(description = "需求分类【1新增 2调整】")
private String demandCategory;
/**
* 数据产品唯一标识
*/
@Schema(description = "数据产品唯一标识")
private String dataProductGuid;
/**
* 需求开始时间
*/
@Schema(description = "需求开始时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermSdate;
/**
* 需求结束时间
*/
@Schema(description = "需求结束时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermEdate;
/**
* 需求内容
*/
@Schema(description = "需求内容")
private String requirementContent;
/**
* 数据需求字段【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Schema(description = "数据需求字段【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
private String dataDemandFieldAttachJson;
/**
* 期望交付时间
*/
@Schema(description = "期望交付时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date deliveryTime;
/**
* 最低预算
*/
@Schema(description = "最低预算")
private BigDecimal minBudget;
/**
* 最高预算
*/
@Schema(description = "最高预算")
private BigDecimal maxBudget;
/**
* 费用来源
*/
@Schema(description = "费用来源")
private String costSource;
/**
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Schema(description = "更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径方式
*/
@Schema(description = "获取路径方式")
private String requestType;
/**
* 场景名称
*/
@Schema(description = "场景名称")
private String sceneName;
/**
* 应用场景描述
*/
@Schema(description = "应用场景描述")
private String sceneDescription;
/**
* 数据质量要求
*/
@Schema(description = "数据质量要求")
private String qualityDemand;
/**
* 隐私合规要求
*/
@Schema(description = "隐私合规要求")
private String privacyDemand;
/**
* 其他补充内容
*/
@Schema(description = "其他补充内容")
private String otherContent;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 需求单位
*/
@Schema(description = "需求单位")
private String requirementUnit;
/**
* 联系方式
*/
@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", timezone = "GMT+8")
private Date processingGenerateTime;
/**
* 验收完成时间
*/
@Schema(description = "验收完成时间")
@JsonFormat(pattern = "yyyy-MM-dd", 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 String contractAttachJson;
@Schema(description = "加工单位类型")
private String processCompanyType;
@Schema(description = "加工单位唯一标识")
private String processCompanyGuid;
@Schema(description = "加工单位名称")
private String processCompanyName;
@Schema(description = "发起人")
private String createUserName;
@Schema(description = "提交时间")
private Date createTime;
@Schema(description = "需求单编号")
private String requirementOrderNo;
@Schema(description = "加工单编号")
private String processOrderNo;
@Schema(title = "专区名称")
private String zqName;
@Schema(description ="业务名称")
private String bizName;
/**
* 跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)
*/
@Schema(title = "跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
@Schema(title = "上架状态(Y 上架 N 下架)")
private String listingStatus;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/**
* 审批信息
*/
@Schema(description = "审批信息")
private BizApproveVO approveVO;
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求状态修改参数
* @author: xcq
* @create: 2025-02-10
**/
@Data
@Schema(title = "数据需求状态修改参数")
public class DemandUpdateStateVO {
@Schema(description = "加工单位唯一标识列表")
private List<String> processCompanyGuidList;
@Schema(description = "加工单位唯一标识")
private String processOrderGuid;
@Schema(description = "资源获取状态【N未开始 A进行中 Y已完成】")
private String resourceAcquisitionState;
@Schema(description = "产品加工状态【N未开始 A进行中 Y已完成】")
private String productProcessingState;
@Schema(description = "产品交付状态【N未开始 A进行中 Y已完成】")
private String productDeliveryState;
@Schema(description = "产品验收状态【N未开始 A进行中 Y已完成】")
private String productAcceptState;
@Schema(description ="产品验收验收完成时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date acceptFinishTime;
@Schema(description ="业务名称")
private String bizName;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.workflow.domain.vo.appove.ApproveVO;
import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
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-26 16:18
**/
@Data
@Schema(title = "企业信息返回参数")
public class EnterpriseApproveRSVO extends ApproveVO {
@Schema(description = "跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
@Schema(description = "专区名称")
private String zqName;
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.mybatis.annotations.LikeQuery;
import com.csbr.cloud.mybatis.enums.LikeQueryEnum;
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-26 16:18
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "企业信息查询参数")
public class EnterpriseQueryVO extends FlowBizGuidQueryDTO {
@Schema(description = "企业名称")
@LikeQuery(type = LikeQueryEnum.ALL)
private String tenantName;
@Schema(description = "企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中;】")
private String bizApproveState;
@Schema(description = "排除业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中;】")
private List<String> bizApproveStateNotList;
@Schema(description = "创建人姓名")
private String createUserName;
@Schema(description = "登录账号")
private String logonUser;
/******** 自定义扩展 *****/
/**
* 数据唯一标识【List集合】
*/
@Schema(description = "数据唯一标识", hidden = true)
private List<String> guidList;
/**
* 是否调用查询的判断
*/
@Schema(description = "是否调用查询的判断", hidden = true)
private Boolean isNeedQuery;
}
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;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息新增、修改参数
* @author: xcq
* @create: 2024-12-26 16:18
**/
@Data
@Schema(title = "企业信息新增、修改参数")
public class EnterpriseRQVO extends FlowRQBaseVO {
@Schema(description = "会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
@Schema(title = "专区名称")
private String zqName;
/**
* 统一社会信用代码
*/
@Schema(description = "统一社会信用代码")
private String socialCreditCode;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Schema(description = "企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
/**
* 注册日期
*/
@Schema(description = "注册日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date registrationDate;
/**
* 注册资本【(万元)】
*/
@Schema(description = "注册资本【(万元)】")
private BigDecimal registeredCapital;
/**
* 税号
*/
@Schema(description = "税号")
private String bankTaxNo;
/**
* 省
*/
@Schema(description = "省")
private String province;
/**
* 市
*/
@Schema(description = "市")
private String city;
/**
* 区
*/
@Schema(description = "区")
private String district;
/**
* 营业期限【1 长期有效;2 自定义】
*/
@Schema(description = "营业期限【1 长期有效;2 自定义】")
private String businessLicenseTerm;
/**
* 营业开始日期
*/
@Schema(description = "营业开始日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date businessLicenseStartDate;
/**
* 营业结束日期
*/
@Schema(description = "营业结束日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date businessLicenseEndDate;
/**
* 营业执照
*/
@Schema(description = "营业执照")
private String businessLicenseJson;
/**
* 营业执照经营范围
*/
@Schema(description = "营业执照经营范围")
private String businessLicenseScope;
/**
* 公司法人
*/
@Schema(description = "公司法人")
private String juridicalPerson;
/**
* 法人证件类型
*/
@Schema(description = "法人证件类型")
private String juridicalPersonIdType;
/**
* 法人证件号
*/
@Schema(description = "法人证件号")
private String juridicalPersonId;
/**
* 法人证件照
*/
@Schema(description = "法人证件照")
private String juridicalPersonIdPhotoJson;
/**
* 登录账号
*/
@Schema(description = "登录账号")
private String logonUser;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactTel;
/**
* 管理员证件号
*/
@Schema(description = "管理员证件号")
private String managerPersonId;
/**
* 管理员证件照
*/
@Schema(description = "管理员证件照")
private String managerPersonIdPhotoJson;
/**
* 授权委托书
*/
@Schema(description = "授权委托书")
private String authorizationLetter;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中; 默认 N】")
private String bizApproveState;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
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;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息返回参数
* @author: xcq
* @create: 2024-12-26 16:18
**/
@Data
@Schema(title = "企业信息返回参数")
public class EnterpriseRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
@Schema(description = "会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
/**
* 统一社会信用代码
*/
@Schema(description = "统一社会信用代码")
private String socialCreditCode;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Schema(description = "企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
/**
* 注册日期
*/
@Schema(description = "注册日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date registrationDate;
/**
* 注册资本【(万元)】
*/
@Schema(description = "注册资本【(万元)】")
private BigDecimal registeredCapital;
/**
* 税号
*/
@Schema(description = "税号")
private String bankTaxNo;
/**
* 省
*/
@Schema(description = "省")
private String province;
/**
* 市
*/
@Schema(description = "市")
private String city;
/**
* 区
*/
@Schema(description = "区")
private String district;
@Schema(description = "注册地")
private String venue;
/**
* 营业期限【1 长期有效;2 自定义】
*/
@Schema(description = "营业期限【1 长期有效;2 自定义】")
private String businessLicenseTerm;
/**
* 营业开始日期
*/
@Schema(description = "营业开始日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date businessLicenseStartDate;
/**
* 营业结束日期
*/
@Schema(description = "营业结束日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date businessLicenseEndDate;
@Schema(description = "营业日期范围")
private String businessLicenseStartEnd;
/**
* 营业执照
*/
@Schema(description = "营业执照")
private String businessLicenseJson;
/**
* 营业执照经营范围
*/
@Schema(description = "营业执照经营范围")
private String businessLicenseScope;
/**
* 公司法人
*/
@Schema(description = "公司法人")
private String juridicalPerson;
/**
* 法人证件类型
*/
@Schema(description = "法人证件类型")
private String juridicalPersonIdType;
/**
* 法人证件号
*/
@Schema(description = "法人证件号")
private String juridicalPersonId;
/**
* 法人证件照
*/
@Schema(description = "法人证件照")
private String juridicalPersonIdPhotoJson;
/**
* 登录账号
*/
@Schema(description = "登录账号")
private String logonUser;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactTel;
/**
* 管理员证件号
*/
@Schema(description = "管理员证件号")
private String managerPersonId;
/**
* 管理员证件照
*/
@Schema(description = "管理员证件照")
private String managerPersonIdPhotoJson;
/**
* 授权委托书
*/
@Schema(description = "授权委托书")
private String authorizationLetter;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中; 默认 N】")
private String bizApproveState;
@Schema(description = "提交时间")
private Date createTime;
@Schema(title = "专区名称")
private String zqName;
/**
* 跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)
*/
@Schema(title = "跨平台审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/**
* 审批信息
*/
@Schema(description = "审批信息")
private BizApproveVO approveVO;
@Schema(description = "变更信息列表")
private List<ChangeInfoVO> changeList;
@Schema(description = "变更前信息列表")
private List<ChangeInfoVO> beforeChangeList;
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.util.MultiValueMap;
/**
* @description: 审批变更检查实体
* @author: XiaoCQ
* @create: 2025-02-20
*/
@Data
@Schema(name = "审批变更检查实体")
public class KafkaApproveDTO {
@Schema(description = "审批流参数")
private FlowUpdateStateDTO updateStateDTO;
@Schema(description = "请求头")
private MultiValueMap<String, String> header;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 加工单加工明细返回参数
* @author: xup
* @create: 2025-02-10 17:57
**/
@Data
@Schema(title = "加工单加工明细返回参数")
public class ProcessOrderProcessDtlRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 会员Guid
*/
@Schema(description = "会员Guid")
private String tenantGuid;
/**
* 加工单Guid
*/
@Schema(description = "加工单Guid")
private String processOrderGuid;
/**
* 加工单号
*/
@Schema(description = "加工单号")
private String processOrderNo;
/**
* 加工单名称
*/
@Schema(description = "加工单名称")
private String processOrderName;
/**
* 加工方式(1 数据服务;2 需求申请)
*/
@Schema(description = "加工方式(1 数据服务;2 需求申请)")
private Integer processType;
/**
* 业务Guid
*/
@Schema(description = "业务Guid")
private String bizGuid;
/**
* 业务名称
*/
@Schema(description = "业务名称")
private String bizName;
/**
* 加工状态(N 未开始;A 进行中;Y 已完成)
*/
@Schema(description = "加工状态(N 未开始;A 进行中;Y 已完成)")
private String processState;
/**
* 加工时间
*/
@Schema(description = "加工时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date processTime;
/**
* 交付时间
*/
@Schema(description = "交付时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date deliverTime;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 加工单管理新增、修改参数
* @author: makejava
* @create: 2024-12-06 15:41
**/
@Data
@Schema(title = "加工单管理新增、修改参数")
public class ProcessOrderRQVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 企业唯一标识
*/
@Schema(description = "企业唯一标识")
private String tenantGuid;
@Schema(description = "加工单位唯一标识")
private String processCompanyGuid;
@Schema(description = "加工人员唯一标识")
private String processStaffGuid;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
/**
* 加工单编号
*/
@Schema(description = "加工单编号")
private String processOrderNo;
/**
* 受理单编号
*/
@Schema(description = "受理单编号")
private String acceptanceOrderNo;
/**
* 需求单编号
*/
@Schema(description = "需求单编号")
private String requirementOrderNo;
/**
* 需求单名称
*/
@Schema(description = "需求单名称")
private String requirementOrderName;
/**
* 需求单位
*/
@Schema(description = "需求单位")
private String requirementUnit;
/**
* 需求开始时间
*/
@Schema(description = "需求开始时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermSdate;
/**
* 需求结束时间
*/
@Schema(description = "需求结束时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date requirementTermEdate;
/**
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Schema(description = "更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径【API路径】
*/
@Schema(description = "获取路径【API路径】")
private String requestPath;
/**
* 需求内容
*/
@Schema(description = "需求内容")
private String requirementContent;
/**
* 需求附件【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Schema(description = "需求附件【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
private String fileUrl;
/**
* 应用场景说明
*/
@Schema(description = "应用场景说明")
private String applicationSceneDesc;
/**
* 受理原因
*/
@Schema(description = "受理原因")
private String acceptanceReason;
/**
* 加工状态(N 未分派;A 处理中;J 已交付;Y 已验收)
*/
@Schema(description = "加工状态(N 未分派;A 处理中;J 已交付;Y 已验收)")
private String processState;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactTel;
/**
* 受理日期
*/
@Schema(description = "受理日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date acceptanceDate;
/**
* 接收人
*/
@Schema(description = "接收人")
private String acceptanceName;
/**
* 接收人唯一标识
*/
@Schema(description = "接收人唯一标识")
private String acceptanceNameGuid;
/**
* 关联合同信息
*/
@Schema(description = "关联合同信息")
private String linkContractInfoJson;
@Schema(description = "加工单位类型")
private String processCompanyType;
/**
* 负责人姓名
*/
@Schema(description = "负责人姓名")
private String chargeStaffName;
/**
* 负责人GUID
*/
@Schema(description = "负责人GUID")
private String chargeStaffGuid;
/**
* 加加工成员【数据格式:[{"guid":"","name":""}]】
*/
@Schema(description = "加工成员【数据格式:[{‘guid’:‘’,‘name’:‘’}]")
private String processMemberJson;
/**
* 最后操作人唯一标识
*/
@Schema(description = "最后操作人唯一标识")
private String lastOperatorUserId;
/**
* 最后操作人姓名
*/
@Schema(description = "最后操作人姓名")
private String lastOperatorUserName;
/**
* 指派时间
*/
@Schema(description = "指派时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date assignDay;
/**
* 加工时间
*/
@Schema(description = "加工时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date processTime;
/**
* 交付时间
*/
@Schema(description = "交付时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date deliverTime;
/**
* 分库标识
*/
@Schema(description = "分库标识")
private String shardingFlag;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @program: common-admin-platform-auth-service
* @description: 订单编号DTO
* @author: Huanglh
* @create: 2020-08-14 09:41
**/
@Data
@Accessors(chain = true)
public class RuleDTO {
/** 规则名称 */
private String ruleName;
/** 规则类型 */
private String ruleType;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.mybatis.annotations.LikeQuery;
import com.csbr.cloud.mybatis.enums.LikeQueryEnum;
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.util.Date;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护查询参数
* @author: xcq
* @create: 2024-12-31 18:49
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "服务商维护查询参数")
public class ServicerMaintainQueryVO extends FlowBizGuidQueryDTO {
@Schema(description = "公司名称")
@LikeQuery(type = LikeQueryEnum.ALL)
private String tenantName;
@Schema(description = "企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
@Schema(description = "能否继续合作【Y 能;N 不能;】")
private String canContinueCollaborate;
/**
* 业务审批状态【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.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;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护新增、修改参数
* @author: xcq
* @create: 2024-12-31 18:49
**/
@Data
@Schema(title = "服务商维护新增、修改参数")
public class ServicerMaintainRQVO extends FlowRQBaseVO {
/**
* 企业唯一标识
*/
@Schema(description = "企业唯一标识")
private String tenantGuid;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Schema(description = "企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
/**
* 提交时间
*/
@Schema(description = "提交时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitTime;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactTel;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Schema(description = "业务审批状态(传Y表示不走审批流)【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
private String bizApproveState;
/**
* 能否继续合作【Y 能;N 不能;】
*/
@Schema(description = "能否继续合作【Y 能;N 不能;】")
private String canContinueCollaborate;
/**
* 维护信息
*/
@Schema(description = "维护信息")
private String maintainJson;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
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.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护返回参数
* @author: xcq
* @create: 2024-12-31 18:49
**/
@Data
@Schema(title = "服务商维护返回参数")
public class ServicerMaintainRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 企业唯一标识
*/
@Schema(description = "企业唯一标识")
private String tenantGuid;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Schema(description = "企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
/**
* 提交时间
*/
@Schema(description = "提交时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitTime;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactTel;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Schema(description = "业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
private String bizApproveState;
/**
* 能否继续合作【Y 能;N 不能;】
*/
@Schema(description = "能否继续合作【Y 能;N 不能;】")
private String canContinueCollaborate;
/**
* 维护信息
*/
@Schema(description = "维护信息")
private String maintainJson;
@Schema(description = "创建人")
private String createUserName;
@Schema(description = "创建时间")
private Date createTime;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
@Schema(description = "企业类型名称")
private String tenantTypeName;
/**
* 审批信息
*/
@Schema(description = "审批信息")
private BizApproveVO approveVO;
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.vo.CsbrBaseVO;
import csbr.cloud.entity.domain.common.CommonJson;
import io.swagger.v3.oas.annotations.media.Schema;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 人员表 视图对象类
*
* @author xiaocq
* @date 2023-12-19
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@Schema(name = "人员详情返回实体")
public class StaffRSVO extends CsbrBaseVO {
/**
* 上级guid
*/
@Schema(description = "上级guid")
private String leaderGuid;
/**
* 用户guid
*/
@Schema(description = "用户guid")
private String userGuid;
/**
* 微信小程序openId
*/
@Schema(description = "微信小程序openId")
private String wechatOpenId;
/**
* 微信公众号openId
*/
@Name("微信公众号openId")
@Schema(description = "微信公众号openId")
private String openId;
/**
* 微信唯一码
*/
@Name("微信唯一码")
@Schema(description = "微信唯一码")
private String unionId;
/**
* 工作地
*/
@Schema(description = "工作地")
private String workAddress;
/**
* 是否部门负责人
*/
@Schema(description = "是否部门负责人")
private String isLeader;
/**
* 公司邮箱
*/
@Schema(description = "公司邮箱")
private String companyEmail;
/**
* 姓名
*/
@Schema(description = "姓名")
private String staffName;
/**
* 工号
*/
@Schema(description = "工号")
private String staffNo;
/**
* 手机号码
*/
@Schema(description = "手机号码")
private String mobileNo;
/**
* 身份证号
*/
@Schema(description = "身份证号")
private String idCode;
/**
* 企业guid
*/
@Schema(description = "企业guid")
private String tenantGuid;
/**
* 部门guidJson
*/
@Schema(description = "部门guidJson")
private String organisationGuidJson;
/**
* 组织架构guid列表
*/
@Schema(description = "组织架构guid列表")
private String organisationRelGuidJson;
/**
* 岗位guidJson
*/
@Schema(description = "岗位guidJson")
private String postGuidJson;
@Schema(description = "是否管理员")
private String isAdmin;
/********非库表存储属性*****/
/** 职级名称 */
@Schema(description = "上级名称")
private String leaderName;
/** 企业名称 */
@Schema(description = "企业名称")
private String tenantName;
@Schema(description = "状态Y 期用;S 停用")
private String bizState;
/** 部门guid列表 */
@Schema(description = "部门guid列表")
private List<String> organisationGuidList;
/** 部门列表名称 */
@Schema(description = "部门列表名称")
private List<String> organisationNameList;
/** 岗位guid列表 */
@Schema(description = "岗位guid列表")
private List<String> postGuidList;
/** 岗位列表名称 */
@Schema(description = "岗位列表名称")
private List<String> postNameList;
/********字典类*****/
/********实体类、用户单选、组织机构单选*****/
/********范围查询*****/
/********自定义扩展*****/
/********子对象*****/
@Schema(description = "菜单模板")
private List<CommonJson> funcPermissionTemplateJson;
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.vo.CsbrBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 企业证照表 视图对象类
*
* @author xiaocq
* @date 2023-12-19
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@Schema(name = "企业证照表")
public class TenantLicRQVO extends CsbrBaseVO {
/**
* 企业唯一标识
*/
@Schema(description = "企业唯一标识")
private String tenantGuid;
/**
* 证照类型
*/
@Schema(description = "证照类型")
private String licenseType;
/**
* 图片内容
*/
@Schema(description = "图片内容")
private String pictContentJson;
/********非库表存储属性*****/
/********字典类*****/
/********实体类、用户单选、组织机构单选*****/
/********范围查询*****/
/********自定义扩展*****/
/********子对象*****/
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.vo.CsbrBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 企业表 视图对象类
*
* @author xiaocq
* @date 2023-12-19
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@Schema(name = "企业表")
public class TenantRQVO extends CsbrBaseVO {
@Schema(description = "上级企业GUID")
private String parentGuid;
/**
* 公司编号
*/
@Schema(description = "公司编号")
private String tenantCode;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
/**
* 公司简称
*/
@Schema(description = "公司简称")
private String abbreviation;
@Schema(description = "企业类型")
private String tenantType;
/**
* 公司法人
*/
@Schema(description = "公司法人")
private String personIncharge;
/**
* 注册日期
*/
@Schema(description = "注册日期")
private LocalDateTime registrationDate;
/**
* 注册资本
*/
@Schema(description = "注册资本")
private BigDecimal registeredCapital;
/**
* 税号
*/
@Schema(description = "税号")
private String bankTaxNo;
/**
* 单位地址
*/
@Schema(description = "单位地址")
private String companyAddress;
/**
* 状态
*/
@Schema(description = "状态 N草稿 Y正常 S停用")
private String bizState;
/**
* 营业执照经营范围
*/
@Schema(description = "营业执照经营范围")
private String businessLicenseScope;
/**
* 联系人
*/
@Schema(description = "联系人")
private String contacts;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactTel;
/**
* 公司电话
*/
@Schema(description = "公司电话")
private String enterprisePhone;
/**
* 省
*/
@Schema(description = "省")
private String province;
/**
* 市
*/
@Schema(description = "市")
private String city;
/**
* 区
*/
@Schema(description = "区")
private String district;
/**
* 地址
*/
@Schema(description = "地址")
private String venue;
/**
* 详细地址
*/
@Schema(description = "详细地址")
private String address;
/**
* 登录账号
*/
@Schema(description = "登录账号")
private String logonUser;
@Schema(description = "会员状态 来自字典")
private String memberStatus;
@Schema(description = "持股类型 来自字典")
private String holdType;
/********非库表存储属性*****/
@Schema(description = "token后台赋值")
private String token;
@Schema(description = "业务唯一标识")
private String bizGuid;
/********字典类*****/
/********实体类、用户单选、组织机构单选*****/
/********范围查询*****/
/********自定义扩展*****/
/********子对象*****/
@Schema(description = "企业证照列表")
private List<TenantLicRQVO> tenantLicList;
@Schema(hidden = true,description = "分库标识")
private String shardingFlag;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.csbr.cloud.mybatis.annotations.LikeQuery;
import com.csbr.cloud.mybatis.enums.LikeQueryEnum;
import csbr.cloud.entity.domain.base.dto.BasePageDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import java.util.List;
/**
* @program: common-admin-platform-auth-service
* @description: 用户查询参数
* @author: yio
* @create: 2020-07-28 13:47
**/
@Data
@Schema(name = "用户查询参数")
public class UserQueryDTO extends BasePageDTO {
/** 系统唯一标识 */
@Schema(name = "guid",title = "系统唯一标识")
private String guid;
/** 锁定(Y 是;N 否) */
@Schema(name = "guid",title = "锁定(Y 是;N 否)")
@Pattern(regexp = "^Y|N$", message = "锁定应该为Y、N中的值。")
private String isLocked;
/** 登录账号 */
@Schema(name = "guid",title = "登录账号")
@LikeQuery(type = LikeQueryEnum.ALL)
private String logonUser;
/** 登录账号(多个) */
@Schema(name = "guid",title = "登录账号(多个)")
private List<String> logonUserList;
/** 手机号 */
@Schema(name = "guid",title = "手机号")
@LikeQuery(type = LikeQueryEnum.ALL)
private String mobileNo;
/** 手机号 */
@Schema(name = "guid",title = "手机号(多个)")
@LikeQuery(type = LikeQueryEnum.ALL)
private List<String> mobileNoList;
/** 姓名 */
@Schema(name = "guid",title = "姓名")
@LikeQuery(type = LikeQueryEnum.ALL)
private String name;
/** 平台GUID */
@Schema(name = "guid",title = "平台GUID")
private String platformGuid;
/** 业务状态(Y 有效;S 停用) */
@Schema(name = "guid",title = "业务状态(Y 有效;S 停用)")
@Pattern(regexp = "^Y|S$", message = "业务状态应该为Y、S中的值。")
private String bizState;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.sql.Timestamp;
/**
* @program: common-admin-platform-auth-service
* @description: 获取用户查询的返回值对象
* @author: yio
* @create: 2020-07-28 14:46
**/
@Data
@Schema(name = "获取用户查询的返回值对象")
public class UserVO {
/** 业务状态(Y 有效;S 停用) */
@Schema(name = "guid",title = "业务状态(Y 有效;S 停用)")
private String bizState;
/** 创建时间 */
@Schema(name = "guid",title = "创建时间")
private Timestamp createTime;
/** 创建人 */
@Schema(name = "guid",title = "创建人")
private String createUserId;
/** 创建人姓名 */
@Schema(name = "guid",title = "创建人姓名")
private String createUserName;
/** 系统唯一标识 */
@Schema(name = "guid",title = "系统唯一标识")
private String guid;
/** 是否删除(null 是;N 否 默认 N) */
@Schema(name = "guid",title = "是否删除(Y 是;N 否 默认 N)")
@TableLogic
private String isDeleted;
/** 锁定(Y 是;N 否) */
@Schema(name = "guid",title = "锁定(Y 是;N 否)")
private String isLocked;
/** 最后登录时间 */
@Schema(name = "guid",title = "最后登录时间")
private Timestamp lastLoginTime;
/** 登录失败次数 */
@Schema(name = "guid",title = "登录失败次数")
private Integer loginErrorCount;
/** 登录账号 */
@Schema(name = "guid",title = "登录账号")
private String logonUser;
/** 手机号 */
@Schema(name = "guid",title = "手机号")
private String mobileNo;
/** 姓名 */
@Schema(name = "guid",title = "姓名")
private String name;
/** 平台GUID */
@Schema(name = "guid",title = "平台GUID")
private String platformGuid;
/** 密码 */
@Schema(name = "guid",title = "密码")
private String pwd;
/** 修改时间 */
@Schema(name = "guid",title = "修改时间")
private Timestamp updateTime;
/** 修改人 */
@Schema(name = "guid",title = "修改人")
private String updateUserId;
/** 修改姓名 */
@Schema(name = "guid",title = "修改姓名")
private String updateUserName;
@Schema(name = "guid",title = "微信授权认证的unionId")
private String unionId;
}
package com.csbr.qingcloud.portal.feign;
import com.csbr.cloud.common.config.FastCallFeignConfiguration;
import com.csbr.cloud.common.entity.DictModel;
import com.csbr.cloud.common.entity.DictionaryVO;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.domain.vo.BoroughPOJO;
import com.csbr.qingcloud.portal.domain.vo.RuleDTO;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author Xiaocq
*/
@FeignClient(value = "ms-daop-configure-service", configuration = FastCallFeignConfiguration.class)
public interface ConfigureFeign {
/**
* 通过字典类型获取字典数据
*/
@HystrixCommand(fallbackMethod = "CommonUtil.sleepFallback", commandProperties =
{
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1500")
})
@RequestMapping(value = "/dict/data/get-by-dictType", method = RequestMethod.GET)
CommonRes<List<DictModel>> getDictListByType(@RequestParam String dictType);
/**
* 获取全部字典
*/
@GetMapping(value = "/dict/data/get-all",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<List<DictionaryVO>> getAll();
/**
* 编码生成
*/
@PostMapping(value = "/rule/new-code",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<String> newCode(@RequestBody RuleDTO dto);
@GetMapping(value = "/borough/get-borough",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<List<BoroughPOJO>> getBoroughCodeName();
}
package com.csbr.qingcloud.portal.feign;
import com.csbr.cloud.common.config.FastCallFeignConfiguration;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.domain.vo.DemandUpdateStateVO;
import com.csbr.qingcloud.portal.domain.vo.ProcessOrderProcessDtlRSVO;
import com.csbr.qingcloud.portal.domain.vo.ProcessOrderRQVO;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
/**
* @author Xiaocq
*/
@FeignClient(value = "ms-data-process-basic-service",url = "${dataProcessUrl}", configuration = FastCallFeignConfiguration.class)
public interface DataProcessBasicFeign {
@PostMapping(value = "/process-order/saveOrUpdate", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Boolean> saveProcessOrder(@RequestBody @Valid ProcessOrderRQVO vo);
@PostMapping(value = "/process-order-process-dtl/get-order-state", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Map<String, DemandUpdateStateVO>> getOrderState(@RequestBody List<String> processOrderGuids);
@PostMapping(value = "/process-order-process-dtl/process-order-list", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<List<ProcessOrderProcessDtlRSVO>> processOrderList(@RequestBody List<String> processOrderGuids);
@PostMapping(value = "/process-order-process-dtl/get-order-state-and-name", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Map<String, DemandUpdateStateVO>> getOrderStateAndBizName(@RequestBody List<String> bizGuids);
}
package com.csbr.qingcloud.portal.feign;
import com.csbr.cloud.common.config.FastCallFeignConfiguration;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.domain.vo.StaffRSVO;
import com.csbr.qingcloud.portal.domain.vo.TenantRQVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author Xiaocq
*/
@FeignClient(value = "ms-daop-personel-service", configuration = FastCallFeignConfiguration.class)
public interface PersonelFeign {
@PostMapping(value = "/tenant/auth", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<TenantRQVO> authTenant(@RequestBody TenantRQVO vo);
@PutMapping(value = "/tenant/update", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<String> updateTenant(@RequestBody TenantRQVO vo);
@PutMapping(value = "/tenant/change-update", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Boolean> changeUpdate(@RequestBody TenantRQVO vo);
@GetMapping(value = "/tenant/get-all-tenant-guid-name-map", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Map<String, String>> getAllTenantGuidNameMap();
@PostMapping(value = "/tenant/check", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Boolean> checkTenant(@Validated @RequestBody TenantRQVO vo);
@GetMapping(value = "/staff/getByUserGuid", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<StaffRSVO> getByUserGuid(@RequestParam String userGuid);
}
package com.csbr.qingcloud.portal.feign;
import com.csbr.cloud.common.config.FastCallFeignConfiguration;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.domain.vo.UserQueryDTO;
import com.csbr.qingcloud.portal.domain.vo.UserVO;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author Xiaocq
*/
@FeignClient(value = "ms-daop-user-service", configuration = FastCallFeignConfiguration.class)
public interface UserFeign {
@PostMapping(value = "/user/data/get-some-info", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<PageListVO<UserVO>> getUserSomeInfo(@RequestBody UserQueryDTO dto);
/**
* 通过手机查用户
*/
@PostMapping(value = "/user/data/get/mobile", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<List<UserVO>> getUserByMobileOrIdCode(@RequestBody UserQueryDTO dto);
}
package com.csbr.qingcloud.portal.feign;
import com.csbr.cloud.common.config.FastCallFeignConfiguration;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.cloud.workflow.domain.dto.appove.FlowQueryDTO;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
import com.csbr.cloud.workflow.domain.vo.appove.ApproveVO;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* @author Xiaocq
*/
@FeignClient(value = "ms-daop-workflow-service", configuration = FastCallFeignConfiguration.class)
public interface WorkflowFeign {
/** 动态业务处理 */
@HystrixCommand(fallbackMethod = "CommonUtil.sleepFallback", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "4500")})
@RequestMapping(value = "/work-flow/data/allow-flow-core", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Boolean> allowFlowCore(@RequestBody FlowUpdateStateDTO dto, @RequestHeader(required = false) MultiValueMap<String, String> headers);
@HystrixCommand(fallbackMethod = "CommonUtil.sleepFallback", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "4500")})
@RequestMapping(value = "/work-flow/data/get-flow-list-tenant", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<PageListVO<ApproveVO>> getFlowListCrossTenant(@RequestBody @Valid FlowQueryDTO dto);
}
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;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* @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("数据需求")
public class MfDemand extends BaseShardingDO {
/**
* 数据需求名称
*/
@Name("数据需求名称")
private String dataDemandName;
/**
* 需求类型
*/
@Name("需求类型")
private String requirementType;
/**
* 需求分类【1新增 2调整】
*/
@Name("需求分类【1新增 2调整】")
private String demandCategory;
/**
* 数据产品唯一标识
*/
@Name("数据产品唯一标识")
private String dataProductGuid;
/**
* 需求开始时间
*/
@Name("需求开始时间")
private Date requirementTermSdate;
/**
* 需求结束时间
*/
@Name("需求结束时间")
private Date requirementTermEdate;
/**
* 需求内容
*/
@Name("需求内容")
private String requirementContent;
/**
* 数据需求字段【数据格式:[{"name":"","path":""},{"name":"","path":""}]】
*/
@Name("数据需求字段【数据格式:[{\"name\":\"\",\"path\":\"\"},{\"name\":\"\",\"path\":\"\"}]】")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String dataDemandFieldAttachJson;
/**
* 期望交付时间
*/
@Name("期望交付时间")
private Date deliveryTime;
/**
* 最低预算
*/
@Name("最低预算")
private BigDecimal minBudget;
/**
* 最高预算
*/
@Name("最高预算")
private BigDecimal maxBudget;
/**
* 费用来源
*/
@Name("费用来源")
private String costSource;
/**
* 更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】
*/
@Name("更新周期【取数据字典:周期,1 年度,2 半年度,3 季度,4 月度】")
private String updateCycle;
/**
* 获取路径方式
*/
@Name("获取路径方式")
private String requestType;
/**
* 场景名称
*/
@Name("场景名称")
private String sceneName;
/**
* 应用场景描述
*/
@Name("应用场景描述")
private String sceneDescription;
/**
* 数据质量要求
*/
@Name("数据质量要求")
private String qualityDemand;
/**
* 隐私合规要求
*/
@Name("隐私合规要求")
private String privacyDemand;
/**
* 其他补充内容
*/
@Name("其他补充内容")
private String otherContent;
/**
* 联系人
*/
@Name("联系人")
private String contacts;
/**
* 需求单位
*/
@Name("需求单位")
private String requirementUnit;
/**
* 联系方式
*/
@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;
@Name("合同附件")
private String contractAttachJson;
@Name("加工单位类型")
private String processCompanyType;
@Name("加工单位唯一标识")
private String processCompanyGuid;
@Name("加工单位名称")
private String processCompanyName;
@Name("需求单编号")
private String requirementOrderNo;
@Name("加工单编号")
private String processOrderNo;
@Name("资产Guid")
private String zqBizGuid;
@Name("专区名称")
private String zqName;
@Name("审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
@Name("上架状态(Y 上架 N 下架)")
private String listingStatus;
}
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.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息实体
* @author: xcq
* @create: 2024-12-26 16:18
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("企业信息")
public class MfEnterprise extends BaseDO {
@Name("会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
@Name("公司名称")
private String tenantName;
/**
* 统一社会信用代码
*/
@Name("统一社会信用代码")
private String socialCreditCode;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Name("企业类型")
private String tenantType;
/**
* 注册日期
*/
@Name("注册日期")
private Date registrationDate;
/**
* 注册资本【(万元)】
*/
@Name("注册资本")
private BigDecimal registeredCapital;
/**
* 税号
*/
@Name("税号")
private String bankTaxNo;
/**
* 省
*/
@Name("省")
private String province;
/**
* 市
*/
@Name("市")
private String city;
/**
* 区
*/
@Name("区")
private String district;
/**
* 营业期限【1 长期有效;2 自定义】
*/
@Name("营业期限")
private String businessLicenseTerm;
/**
* 营业开始日期
*/
@Name("营业开始日期")
private Date businessLicenseStartDate;
/**
* 营业结束日期
*/
@Name("营业结束日期")
private Date businessLicenseEndDate;
/**
* 营业执照
*/
@Name("营业执照")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String businessLicenseJson;
/**
* 经营范围
*/
@Name("经营范围")
private String businessLicenseScope;
/**
* 公司法人
*/
@Name("公司法人")
private String juridicalPerson;
/**
* 法人证件类型
*/
@Name("法人证件类型")
private String juridicalPersonIdType;
/**
* 法人证件号
*/
@Name("法人证件号")
private String juridicalPersonId;
/**
* 法人证件照
*/
@Name("法人证件照")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String juridicalPersonIdPhotoJson;
/**
* 登录账号
*/
@Name("登录账号")
private String logonUser;
/**
* 联系人
*/
@Name("联系人")
private String contacts;
/**
* 联系人电话
*/
@Name("联系人电话")
private String contactTel;
/**
* 管理员证件号
*/
@Name("管理员证件号")
private String managerPersonId;
/**
* 管理员证件照
*/
@Name("管理员证件照")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String managerPersonIdPhotoJson;
/**
* 授权委托书
*/
@Name("授权委托书")
private String authorizationLetter;
@Name("资产Guid")
private String zqBizGuid;
@Name("专区名称")
private String zqName;
@Name("审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Name("业务审批状态")
private String bizApproveState;
}
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.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息变更审批实体
* @author: xcq
* @create: 2024-12-27 15:10
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("企业信息变更审批")
public class MfEnterpriseChangeApprove extends BaseDO {
@Name("会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
@Name("公司名称")
private String tenantName;
/**
* 统一社会信用代码
*/
@Name("统一社会信用代码")
private String socialCreditCode;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Name("企业类型")
private String tenantType;
/**
* 注册日期
*/
@Name("注册日期")
private Date registrationDate;
/**
* 注册资本【(万元)】
*/
@Name("注册资本")
private BigDecimal registeredCapital;
/**
* 税号
*/
@Name("税号")
private String bankTaxNo;
/**
* 省
*/
@Name("省")
private String province;
/**
* 市
*/
@Name("市")
private String city;
/**
* 区
*/
@Name("区")
private String district;
/**
* 营业期限【1 长期有效;2 自定义】
*/
@Name("营业期限")
private String businessLicenseTerm;
/**
* 营业开始日期
*/
@Name("营业开始日期")
private Date businessLicenseStartDate;
/**
* 营业结束日期
*/
@Name("营业结束日期")
private Date businessLicenseEndDate;
/**
* 营业执照
*/
@Name("营业执照")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String businessLicenseJson;
/**
* 营业执照经营范围
*/
@Name("营业执照经营范围")
private String businessLicenseScope;
/**
* 公司法人
*/
@Name("公司法人")
private String juridicalPerson;
/**
* 法人证件类型
*/
@Name("法人证件类型")
private String juridicalPersonIdType;
/**
* 法人证件号
*/
@Name("法人证件号")
private String juridicalPersonId;
/**
* 法人证件照
*/
@Name("法人证件照")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String juridicalPersonIdPhotoJson;
/**
* 登录账号
*/
@Name("登录账号")
private String logonUser;
/**
* 联系人
*/
@Name("联系人")
private String contacts;
/**
* 联系人电话
*/
@Name("联系人电话")
private String contactTel;
/**
* 管理员证件号
*/
@Name("管理员证件号")
private String managerPersonId;
/**
* 管理员证件照
*/
@Name("管理员证件照")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String managerPersonIdPhotoJson;
/**
* 授权委托书
*/
@Name("授权委托书")
private String authorizationLetter;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Name("业务审批状态")
private String bizApproveState;
/**
* 审批流唯一标识
*/
@Name("审批流唯一标识")
private String approveGuid;
/**
* 原数据唯一标识
*/
@Name("原数据唯一标识")
private String sourceGuid;
@Name("资产Guid")
private String zqBizGuid;
@Name("专区名称")
private String zqName;
@Name("审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
/**
* 数据类型【数据类型 1原数据 2新数据 0认证表数据】
*/
@Name("数据类型")
private String dataType;
}
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.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护实体
* @author: xcq
* @create: 2024-12-31 18:49
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("服务商维护")
public class MfServicerMaintain extends BaseDO {
/**
* 企业唯一标识
*/
@Name("企业唯一标识")
private String tenantGuid;
/**
* 公司名称
*/
@Name("公司名称")
private String tenantName;
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Name("企业类型【选择平台字典【公司类型】的选项】")
private String tenantType;
/**
* 提交时间
*/
@Name("提交时间")
private Date submitTime;
/**
* 联系人
*/
@Name("联系人")
private String contacts;
/**
* 联系人电话
*/
@Name("联系人电话")
private String contactTel;
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Name("业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
private String bizApproveState;
/**
* 能否继续合作【Y 能;N 不能;】
*/
@Name("能否继续合作【Y 能;N 不能;】")
private String canContinueCollaborate;
/**
* 维护信息
*/
@Name("维护信息")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String maintainJson;
}
package com.csbr.qingcloud.portal.mybatis.entity;
import csbr.cloud.entity.domain.base.dao.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护明细实体
* @author: xcq
* @create: 2024-12-31 18:52
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("服务商维护明细")
public class MfServicerMaintainDetail extends BaseDO {
/**
* 企业唯一标识
*/
@Name("企业唯一标识")
private String tenantGuid;
/**
* 父唯一标识
*/
@Name("父唯一标识")
private String parentGuid;
/**
* 字典唯一标识
*/
@Name("字典唯一标识")
private String dicGuid;
/**
* 字典值
*/
@Name("字典值")
private String dicValue;
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
/**
* @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.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息变更审批 Mapper 接口
* @author: xcq
* @create: 2024-12-27 15:10
**/
@Mapper
public interface MfEnterpriseChangeApproveMapper extends BaseMapper<MfEnterpriseChangeApprove> {
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息 Mapper 接口
* @author: xcq
* @create: 2024-12-26 16:18
**/
@Mapper
public interface MfEnterpriseMapper extends BaseMapper<MfEnterprise> {
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintainDetail;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护明细 Mapper 接口
* @author: xcq
* @create: 2024-12-31 18:52
**/
@Mapper
public interface MfServicerMaintainDetailMapper extends BaseMapper<MfServicerMaintainDetail> {
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintain;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护 Mapper 接口
* @author: xcq
* @create: 2024-12-31 18:49
**/
@Mapper
public interface MfServicerMaintainMapper extends BaseMapper<MfServicerMaintain> {
}
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.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息变更审批逻辑层接口
* @author: xcq
* @create: 2024-12-27 15:10
**/
public interface MfEnterpriseChangeApproveService extends CsbrService<MfEnterpriseChangeApprove> {
}
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息逻辑层接口
* @author: xcq
* @create: 2024-12-26 16:18
**/
public interface MfEnterpriseService extends CsbrService<MfEnterprise> {
}
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintainDetail;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护明细逻辑层接口
* @author: xcq
* @create: 2024-12-31 18:52
**/
public interface MfServicerMaintainDetailService extends CsbrService<MfServicerMaintainDetail> {
}
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintain;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护逻辑层接口
* @author: xcq
* @create: 2024-12-31 18:49
**/
public interface MfServicerMaintainService extends CsbrService<MfServicerMaintain> {
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
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:/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 {
@Resource
private MfDemandMapper mfDemandMapper;
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.mapper.MfEnterpriseChangeApproveMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息变更审批逻辑层接口实现
* @author: xcq
* @create: 2024-12-27 15:10
**/
@Service
public class MfEnterpriseChangeApproveServiceImpl extends CsbrServiceImpl<MfEnterpriseChangeApproveMapper, MfEnterpriseChangeApprove> implements MfEnterpriseChangeApproveService {
@Resource
private MfEnterpriseChangeApproveMapper mfEnterpriseChangeApproveMapper;
@Override
public List<MfEnterpriseChangeApprove> listByIds(Collection<? extends Serializable> idList) {
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = Wrappers.lambdaQuery(MfEnterpriseChangeApprove.class);
queryWrapper.in(MfEnterpriseChangeApprove::getGuid, idList);
csbrExcludeShardingLambdaQueryWrapper(queryWrapper);
return list(queryWrapper);
}
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.mapper.MfEnterpriseMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息逻辑层接口实现
* @author: xcq
* @create: 2024-12-26 16:18
**/
@Service
public class MfEnterpriseServiceImpl extends CsbrServiceImpl<MfEnterpriseMapper, MfEnterprise> implements MfEnterpriseService {
@Resource
private MfEnterpriseMapper mfEnterpriseMapper;
@Override
public List<MfEnterprise> listByIds(Collection<? extends Serializable> idList) {
LambdaQueryWrapper<MfEnterprise> queryWrapper = Wrappers.lambdaQuery(MfEnterprise.class);
queryWrapper.in(MfEnterprise::getGuid, idList);
csbrExcludeShardingLambdaQueryWrapper(queryWrapper);
return list(queryWrapper);
}
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.mapper.MfServicerMaintainDetailMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintainDetail;
import com.csbr.qingcloud.portal.mybatis.service.MfServicerMaintainDetailService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护明细逻辑层接口实现
* @author: xcq
* @create: 2024-12-31 18:52
**/
@Service
public class MfServicerMaintainDetailServiceImpl extends CsbrServiceImpl<MfServicerMaintainDetailMapper, MfServicerMaintainDetail> implements MfServicerMaintainDetailService {
@Resource
private MfServicerMaintainDetailMapper mfServicerMaintainDetailMapper;
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.mapper.MfServicerMaintainMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintain;
import com.csbr.qingcloud.portal.mybatis.service.MfServicerMaintainService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护逻辑层接口实现
* @author: xcq
* @create: 2024-12-31 18:49
**/
@Service
public class MfServicerMaintainServiceImpl extends CsbrServiceImpl<MfServicerMaintainMapper, MfServicerMaintain> implements MfServicerMaintainService {
@Resource
private MfServicerMaintainMapper mfServicerMaintainMapper;
}
package com.csbr.qingcloud.portal.service;
import com.csbr.qingcloud.portal.domain.vo.*;
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 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);
/**
* 数据需求-门户分页
* @param queryVO
* @return
*/
PageListVO<DemandPortalRSVO> portalPageList(DemandPortalQueryVO 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);
/**
* 数据需求-流程结束后进行业务回调(跨服务审批)
* @param dto
*/
void crossFlowCallBack(BizCallbackDTO dto);
Boolean lastApprove(DemandApproveVO dto);
DemandRSVO getDemandDetailByProcess(String processOrderNo);
/**
* 根据加工单编号查询资产列表
* @return
*/
List<ProcessOrderProcessDtlRSVO> listByProcessOrderNo();
/**
* 数据需求-修改上架状态
* @param vo
* @return
*/
Boolean updateGroundingPick(DemandRQVO vo);
}
package com.csbr.qingcloud.portal.service;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.ChangeApproveVO;
import com.csbr.qingcloud.portal.domain.vo.ChangeInfoVO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO;
import java.util.List;
/**
* @description: 供应商商品变更
* @author: XiaoCQ
* @create: 2024-12-27
**/
public interface EnterpriseChangeApproveService {
void changeSave(ChangeApproveVO vo);
ChangeApproveVO changeDetail(String guid);
void changeUpdate(BizCallbackDTO dto);
void removeByGuids(List<String> guids);
void crossFlowCallBack(BizCallbackDTO dto);
void crossRemoveByBizGuid(List<String> zqBizGuids);
EnterpriseRSVO getEnterpriseChangeDetail(String guid);
}
package com.csbr.qingcloud.portal.service;
import com.csbr.cloud.workflow.domain.dto.appove.FlowQueryDTO;
import com.csbr.qingcloud.portal.domain.vo.*;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
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 java.util.Date;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息业务逻辑接口
* @author: xcq
* @create: 2024-12-26 16:18
**/
public interface EnterpriseService {
/**
* 企业信息分页查询
* @author xcq
* @date 2024-12-26 16:18
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO>
*/
PageListVO<EnterpriseRSVO> pageList(EnterpriseQueryVO queryVO);
/**
* 企业信息-分页(调用流程)
* @param dto
* @return
*/
PageListVO<EnterpriseApproveRSVO> flowPageList(FlowQueryDTO dto);
/**
* 企业信息获取详情数据
* @author xcq
* @date 2024-12-26 16:18
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO
*/
EnterpriseRSVO getEnterpriseDetail(String guid);
/**
* 企业信息数据新增
* @author xcq
* @date 2024-12-26 16:18
* @param flowBaseVO
* @return void
*/
void saveEnterprise(FlowRQBaseVO flowBaseVO);
/**
* 企业信息数据修改
* @author xcq
* @date 2024-12-26 16:18
* @param flowBaseVO
* @return void
*/
void updateEnterprise(FlowRQBaseVO flowBaseVO);
/**
* 企业信息数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-26 16:18
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-26 16:18
* @param dto
* @return void
*/
void flowCallBack(BizCallbackDTO dto);
/**
* 流程结束后进行业务回调(跨服务审批)
* @param dto
*/
void crossFlowCallBack(BizCallbackDTO dto);
Boolean check(EnterpriseRQVO vo);
List<ChangeInfoVO> getChange(String sourceGuid, Date createTime);
List<ChangeInfoVO> beforeChangeList(String approveGuid);
EnterpriseRSVO getEnterpriseDetailByName(String tenantName);
/** 将此账号提交的数据需求迁移到新的企业 */
void moveOldData(TenantRQVO vo);
/** 更新会员信息 */
void updateTenant(MfEnterprise vo);
/**
* 企业信息-根据登陆账号查询详情
* @param logonUser
* @return
*/
EnterpriseRSVO getEnterpriseDetailByLogonUser(String logonUser);
}
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.ServicerMaintainQueryVO;
import com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护业务逻辑接口
* @author: xcq
* @create: 2024-12-31 18:49
**/
public interface ServicerMaintainService {
/**
* 服务商维护分页查询
* @author xcq
* @date 2024-12-31 18:49
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO>
*/
PageListVO<ServicerMaintainRSVO> pageList(ServicerMaintainQueryVO queryVO);
/**
* 服务商维护获取详情数据
* @author xcq
* @date 2024-12-31 18:49
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO
*/
ServicerMaintainRSVO getServicerMaintainDetail(String guid);
/**
* 服务商维护数据新增
* @author xcq
* @date 2024-12-31 18:49
* @param flowBaseVO
* @return void
*/
void saveServicerMaintain(FlowRQBaseVO flowBaseVO);
/**
* 服务商维护数据修改
* @author xcq
* @date 2024-12-31 18:49
* @param flowBaseVO
* @return void
*/
void updateServicerMaintain(FlowRQBaseVO flowBaseVO);
/**
* 服务商维护数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-31 18:49
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-31 18:49
* @param dto
* @return void
*/
void flowCallBack(BizCallbackDTO dto);
}
package com.csbr.qingcloud.portal.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.enums.WorkFlowBizEnum;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
import com.csbr.cloud.workflow.feign.WorkflowFeign;
import com.csbr.qingcloud.portal.domain.vo.*;
import com.csbr.qingcloud.portal.feign.ConfigureFeign;
import com.csbr.qingcloud.portal.feign.DataProcessBasicFeign;
import com.csbr.qingcloud.portal.feign.PersonelFeign;
import com.csbr.qingcloud.portal.util.DateUtil;
import com.csbr.qingcloud.portal.util.InvokeUtil;
import com.csbr.qingcloud.portal.util.ZQConfig;
import csbr.cloud.entity.domain.user.UserInfo;
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.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.mybatis.entity.MfDemand;
import com.csbr.qingcloud.portal.mybatis.service.MfDemandService;
import com.csbr.qingcloud.portal.service.DemandService;
import csbr.cloud.entity.utils.UserContextHolder;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 数据需求业务逻辑实现
* @author: xcq
* @create: 2024-12-31 18:46
**/
@Slf4j
@Service
public class DemandServiceImpl extends FlowAbstractImpl implements DemandService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "数据需求";
private static final String SysFuncCode = "SJXQ";
/**
* 流程类型
*/
private static final String FLOW_TYPE = WorkFlowBizEnum.DATA_DEMAND.getValue();
@Value("${isTenantAndHospital:false}")
private Boolean isTenantAndHospital;
@Autowired
private ZQConfig zqConfig;
@Autowired
private InvokeUtil invokeUtil;
@Resource
private MfDemandService mfDemandService;
@Resource
private ConfigureFeign configureFeign;
@Resource
private PersonelFeign personelFeign;
@Resource
private DataProcessBasicFeign dataProcessBasicFeign;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private ApprovalFlowUtil approvalFlowUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
@Resource
private WorkflowFeign workflowFeign;
/**
* 数据需求分页查询
* @author xcq
* @date 2024-12-31 18:46
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.DemandRSVO>
*/
@Override
public PageListVO<DemandRSVO> pageList(DemandQueryVO queryVO) {
beforeQuery(queryVO);
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);
mfDemandService.csbrExcludeShardingLambdaQueryWrapper(queryWrapper);
PageListVO<MfDemand> pageList = mfDemandService.csbrPageList(queryVO, queryWrapper);
PageListVO<DemandRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
return new PageListVO<>(queryVO.getPageSize(), queryVO.getPageIndex());
}
@Override
public PageListVO<DemandPortalRSVO> portalPageList(DemandPortalQueryVO queryVO) {
LambdaQueryWrapper<MfDemand> queryWrapper = mfDemandService.csbrQueryWrapper(queryVO, MfDemand.class);
queryWrapper.eq(MfDemand::getListingStatus, "Y").eq(MfDemand::getBizApproveState, "Y");
queryWrapper.orderByDesc(MfDemand::getCreateTime);
mfDemandService.csbrExcludeShardingLambdaQueryWrapper(queryWrapper);
PageListVO<MfDemand> pageList = mfDemandService.csbrPageList(queryVO, queryWrapper);
PageListVO<DemandPortalRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
if(CollectionUtils.isNotEmpty(pageList.getRecords())){
rsPageList.setRecords(csbrBeanUtil.convert(pageList.getRecords(), DemandPortalRSVO.class));
}
return rsPageList;
}
/**
* 数据需求获取详情数据
* @author xcq
* @date 2024-12-31 18:46
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.DemandRSVO
*/
@Override
public DemandRSVO getDemandDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfDemand entity = mfDemandService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
DemandRSVO demandRSVO = convertToVO(entity, getStateMap(Collections.singletonList(guid)));
// 补充业务产品名称
String bizGuid = StringUtils.isNotEmpty(entity.getDataProductGuid()) ? entity.getDataProductGuid() : guid;
Map<String, DemandUpdateStateVO> data = dataProcessBasicFeign.getOrderStateAndBizName(Collections.singletonList(bizGuid)).getData();
if (ObjectUtils.isNotEmpty(data)) {
DemandUpdateStateVO demandUpdateStateVO = data.get(bizGuid);
demandRSVO.setBizName(demandUpdateStateVO.getBizName());
}
return demandRSVO;
}
private Map<String, DemandUpdateStateVO> getStateMap(List<String> guids){
if(CollectionUtils.isEmpty(guids)){
return null;
}
guids = guids.stream().filter(Objects::nonNull).collect(Collectors.toList());
if(CollectionUtils.isEmpty(guids)){
return null;
}
try{
Map<String, DemandUpdateStateVO> map = dataProcessBasicFeign.getOrderState(guids).getData();
return map;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* 数据需求数据新增
* @author xcq
* @date 2024-12-31 18:46
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Override
public void saveDemand(FlowRQBaseVO flowBaseVO) {
DemandRQVO rqVO = (DemandRQVO) flowBaseVO;
beforeSave(rqVO);
MfDemand entity = convertToEntity(rqVO);
entity.setRequirementOrderNo(configureFeign.newCode(new RuleDTO().setRuleName("demand-code").setRuleType("generate")).getData());
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startWorkFlow(rqVO, approvalDTO, entity::setBizApproveState);
// 业务数据保存
boolean flag = mfDemandService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(entity, rqVO);
}
private void checkProductGuid(String dataProductGuid){
if (StringUtils.isBlank(dataProductGuid)) {
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, "产品不能为空");
}
//此产品审批中的需求只能有1个
LambdaQueryWrapper<MfDemand> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MfDemand::getDataProductGuid,dataProductGuid);
wrapper.eq(MfDemand::getBizApproveState,"A");
List<MfDemand> list = mfDemandService.list(wrapper);
if(CollectionUtils.isNotEmpty(list)){
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, "该数据产品已在审批中,请勿重复提交!");
}
}
/**
* 数据需求数据修改
* @author xcq
* @date 2024-12-31 18:46
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void updateDemand(FlowRQBaseVO flowBaseVO) {
DemandRQVO rqVO = (DemandRQVO) flowBaseVO;
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
// MfDemand oldEntity = mfDemandService.getById(rqVO.getGuid());
beforeUpdate(rqVO);
MfDemand entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.restartWorkFlow(rqVO, rqVO.getBizApproveState(), approvalDTO, this::saveDemand, entity::setBizApproveState);
if (Boolean.FALSE.equals(rqVO.getIsRestart())) {
// 修改业务数据
mfDemandService.updateById(entity);
afterUpdate(entity, rqVO);
}
}
/**
* 重新提交数据需求
* @author xcq
* @date 2025-02-17 18:16
* @param entity
* @param rqVO
* @param approvalDTO
* @return void
*/
private void againSubmitFlow(MfDemand entity, DemandRQVO rqVO, AddApprovalDTO approvalDTO) {
entity.setGuid(CommonUtil.newGuid());
mfDemandService.csbrBaseEntity(entity);
entity.setBizApproveState("A");
// 保存新数据
boolean flag = mfDemandService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(String.format("重新提交%s",FUNCTION_NAME)));
}
// 发起新的流程
approvalDTO.setBizGuid(entity.getGuid());
approvalDTO.setUrlParam(String.format("guid=%s&demandCategory=%s&name=%s&type=detail", entity.getGuid(), entity.getDemandCategory(), entity.getDataDemandName()));
approvalFlowUtil.addApproval(approvalDTO);
afterSave(entity, rqVO);
}
/**
* 数据需求数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-31 18:46
* @param guids
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(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), "数据唯一标识"));
}
String crossPlatformApproveState = "";
for (String guid : guids) {
MfDemand entity = mfDemandService.getById(guid);
if (entity == null) {
continue;
}
if (ApprovalStateEnum.CHECKING.getValue().equals(entity.getBizApproveState()) ||
(ApprovalStateEnum.PASSED.getValue().equals(entity.getBizApproveState()) && "Y".equals(entity.getListingStatus()))) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, "审批中和审批通过的数据不能删除!");
}
mfDemandService.removeById(entity);
afterRemove(entity);
crossPlatformApproveState = entity.getCrossPlatformApproveState();
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
// 删除主平台数据
if (!zqConfig.getIsMain() && StringUtils.isNotEmpty(crossPlatformApproveState)) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("zqSystemCode", SysFuncCode);
jsonObject.put("zqBizGuids", JSON.toJSONString(guids));
jsonObject.put("isCollection", true);
invokeUtil.invokeMainDel(jsonObject, zqConfig.getAppKey(), zqConfig.getZqDelUrl());
}
}
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-31 18:46
* @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));
}
String orderNo = null;
LambdaUpdateWrapper<MfDemand> updateWrapper = new LambdaUpdateWrapper<>();
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState()) && !dto.getIsZqPlatformApprove()) {
if (StringUtils.isEmpty(entity.getZqName())) {
//生成加工单
orderNo = addOrder(mfDemandService.getById(dto.getBizGuid()),dto);
}
// 判断是否审核自动上架
if (!isTenantAndHospital) {
updateWrapper.set(MfDemand::getListingStatus, "Y");
}
}
// 同步更新审批状态
updateWrapper.set(MfDemand::getBizApproveState, dto.getApprovalState());
updateWrapper.set(StringUtils.isNotBlank(orderNo),MfDemand::getProcessOrderNo, orderNo);
updateWrapper.set(StringUtils.isNotBlank(orderNo),MfDemand::getProcessingGenerateTime, new Date());
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)));
}
}
@Override
public void crossFlowCallBack(BizCallbackDTO dto) {
MfDemand entity = mfDemandService.getById(dto.getBizGuid());
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(FUNCTION_NAME));
}
String orderNo = null;
LambdaUpdateWrapper<MfDemand> updateWrapper = new LambdaUpdateWrapper<>();
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState())) {
//生成加工单
orderNo = addOrder(mfDemandService.getById(dto.getBizGuid()),dto);
// 判断是否审核自动上架
if (!isTenantAndHospital) {
updateWrapper.set(MfDemand::getListingStatus, "Y");
}
}
// 同步更新审批状态
updateWrapper.set(MfDemand::getBizApproveState, dto.getApprovalState());
updateWrapper.set(MfDemand::getCrossPlatformApproveState, dto.getApprovalState());
updateWrapper.set(StringUtils.isNotBlank(orderNo),MfDemand::getProcessOrderNo, orderNo);
updateWrapper.set(StringUtils.isNotBlank(orderNo),MfDemand::getProcessingGenerateTime, new Date());
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)));
}
}
private String addOrder(MfDemand bean,BizCallbackDTO dto){
ProcessOrderRQVO vo = csbrBeanUtil.convert(bean,ProcessOrderRQVO.class);
vo.setGuid(bean.getGuid());
vo.setTenantName(personelFeign.getAllTenantGuidNameMap().getData().get(bean.getTenantGuid()));
vo.setRequirementOrderNo(bean.getRequirementOrderNo());
vo.setProcessOrderNo(configureFeign.newCode(new RuleDTO().setRuleName("process-order-code").setRuleType("generate")).getData());
vo.setAcceptanceOrderNo(configureFeign.newCode(new RuleDTO().setRuleName("acceptance-order-code").setRuleType("generate")).getData());
vo.setRequirementOrderName(bean.getDataDemandName());
vo.setApplicationSceneDesc(bean.getSceneDescription());
vo.setProcessState("N");
vo.setContactTel(bean.getContactInformation());
vo.setLinkContractInfoJson(bean.getContractAttachJson());
vo.setProcessCompanyType(bean.getProcessCompanyType());
if("人员".equals(bean.getProcessCompanyType())){
vo.setProcessStaffGuid(bean.getProcessCompanyGuid());
}
else if("公司".equals(bean.getProcessCompanyType())){
vo.setProcessCompanyGuid(bean.getProcessCompanyGuid());
}
vo.setFileUrl(bean.getDataDemandFieldAttachJson());
UserInfo user = UserContextHolder.get();
vo.setAcceptanceNameGuid(dto.getStaffGuid());
vo.setAcceptanceName(user.getUserName());
vo.setAcceptanceDate(new Date());
vo.setAcceptanceReason(dto.getApproveSuggest());
vo.setRequestPath(bean.getRequestType());
dataProcessBasicFeign.saveProcessOrder(vo);
return vo.getProcessOrderNo();
}
@GlobalTransactional
@Override
public Boolean lastApprove(DemandApproveVO dto) {
MfDemand entity = mfDemandService.getById(dto.getBizGuid());
entity.setContractAttachJson(dto.getContractAttachJson());
entity.setProcessCompanyType(dto.getProcessCompanyType());
entity.setProcessCompanyGuid(dto.getProcessCompanyGuid());
entity.setProcessCompanyName(dto.getProcessCompanyName());
mfDemandService.updateById(entity);
FlowUpdateStateDTO flowDTO = csbrBeanUtil.convert(dto,FlowUpdateStateDTO.class);
MfDemand demand = new MfDemand();
demand.setContractAttachJson(entity.getContractAttachJson());
demand.setProcessCompanyType(entity.getProcessCompanyType());
demand.setProcessCompanyGuid(entity.getProcessCompanyGuid());
demand.setProcessCompanyName(entity.getProcessCompanyName());
flowDTO.setBizData(JSON.toJSONString(demand));
flowDTO.setBackEndInvoke(true);
workflowFeign.allowFlowCore(flowDTO).getData();
return true;
}
@Override
public DemandRSVO getDemandDetailByProcess(String processOrderNo) {
LambdaQueryWrapper<MfDemand> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfDemand::getProcessOrderNo,processOrderNo);
List<MfDemand> list = mfDemandService.list(queryWrapper);
if(CollectionUtils.isEmpty(list)){
return null;
}
return convertToVO(list.get(0),getStateMap(Collections.singletonList(list.get(0).getGuid())));
}
@Override
public List<ProcessOrderProcessDtlRSVO> listByProcessOrderNo() {
LambdaQueryWrapper<MfDemand> queryWrapper = Wrappers.lambdaQuery(MfDemand.class);
queryWrapper.isNotNull(MfDemand::getRequirementOrderNo).isNotNull(MfDemand::getProcessOrderNo);
queryWrapper.orderByDesc(MfDemand::getCreateTime);
List<MfDemand> mfDemands = mfDemandService.list(queryWrapper);
if (ObjectUtils.isEmpty(mfDemands)) {
return null;
}
List<String> guids = mfDemands.stream().map(MfDemand::getGuid).toList();
return dataProcessBasicFeign.processOrderList(guids).getData();
}
@Override
public Boolean updateGroundingPick(DemandRQVO vo) {
MfDemand mfDemand = mfDemandService.getById(vo.getGuid());
if (ObjectUtils.isEmpty(mfDemand)) {
return Boolean.FALSE;
}
LambdaUpdateWrapper<MfDemand> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.eq(MfDemand::getGuid, vo.getGuid())
.set(MfDemand::getListingStatus, vo.getListingStatus());
mfDemandService.update(updateWrapper);
// 下架主平台数据
if (!zqConfig.getIsMain() && StringUtils.isNotEmpty(mfDemand.getCrossPlatformApproveState())) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("zqSystemCode", SysFuncCode);
jsonObject.put("guid", vo.getGuid());
jsonObject.put("listingStatus", vo.getListingStatus());
invokeUtil.invokeMainDel(jsonObject, zqConfig.getAppKey(), zqConfig.getGroundingPickUrl());
}
return Boolean.TRUE;
}
/**
* 获取发起流程参数
*
* @param entity
* @param rqVO
* @return com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO
* @author xcq
* @date 2024-12-31 18:46
*/
private AddApprovalDTO getAddApprovalDTO(MfDemand entity, DemandRQVO rqVO) {
AddApprovalDTO approvalDTO = new AddApprovalDTO(FLOW_TYPE, entity.getGuid());
// todo
approvalDTO.setFuncCode(SysFuncCode);
approvalDTO.setUrlParam(String.format("guid=%s&demandCategory=%s&name=%s&type=detail", entity.getGuid(), entity.getDemandCategory(), entity.getDataDemandName()));
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(String.format("%s,%s", CommonUtil.getUserInfo().getUserName(),entity.getDataDemandName()));
// 流程列表数据核心param参数处理
approvalDTO.setParam1(entity.getDataDemandName());
approvalDTO.setParam2(null);
approvalDTO.setParam3(null);
approvalDTO.setParam4(null);
// 增加跨服务审批字段
rqVO.setGuid(entity.getGuid());
approvalDTO.setBizData(JSON.toJSONString(rqVO));
return approvalDTO;
}
/**
* 数据需求新新增前置处理
* @author xcq
* @date 2024-12-31 18:46
* @param rqVO
* @return void
*/
private void beforeSave(DemandRQVO rqVO) {
//region 1.输入基础验证
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
if(rqVO.getImmediateApprove() && "2".equals(rqVO.getDemandCategory())){
checkProductGuid(rqVO.getDataProductGuid());
}
//endregion 2.2.业务数据验证
if (!isTenantAndHospital) {
rqVO.setListingStatus("N");
}
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 数据需求新增后置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @param rqVO
* @return void
*/
private void afterSave(MfDemand entity, DemandRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 数据需求修改前置校验、处理
* @author xcq
* @date 2024-12-31 18:46
* @param rqVO
* @return void
*/
private void beforeUpdate(DemandRQVO rqVO) {
//region 1.输入基础验证
if (StringUtils.isBlank(rqVO.getGuid())) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010", String.format("修改%s数据",FUNCTION_NAME), "数据唯一标识"));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
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.业务数据验证
if(rqVO.getImmediateApprove() && "2".equals(rqVO.getDemandCategory())){
checkProductGuid(rqVO.getDataProductGuid());
}
//endregion 2.数据验证特殊处理
rqVO.setBizApproveState(entity.getBizApproveState());
// 上次审批通过时 重新提交上架 修改上次审批状态为已废弃
if (ApprovalStateEnum.PASSED.getValue().equals(entity.getBizApproveState())) {
LambdaUpdateWrapper<MfDemand> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.eq(MfDemand::getGuid, rqVO.getGuid())
.set(MfDemand::getBizApproveState, ApprovalStateEnum.DISABLE.getValue());
mfDemandService.update(updateWrapper);
}
if (!isTenantAndHospital) {
rqVO.setListingStatus("N");
}
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 数据需求修改后置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @param rqVO
* @return void
*/
protected void afterUpdate(MfDemand entity, DemandRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 数据需求删除前置处理
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @return void
*/
private void beforeRemove(MfDemand entity) {
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 xcq
* @date 2024-12-31 18:46
* @param entity
* @return void
*/
private void afterRemove(MfDemand entity) {
}
/**
* 数据需求查询方法前置验证、处理
* @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);
}
}
//如果是非认证会员在操作时,如果是管理员看全部,非管理员看自己的数据
StaffRSVO staff = getCurStaff();
if("非认证会员".equals(staff.getTenantName())){
if("N".equals(staff.getIsAdmin())){
rqQueryVO.setCreateUserName(staff.getStaffName());
}
}
}
private StaffRSVO getCurStaff(){
UserInfo userInfo = UserContextHolder.get();
StaffRSVO staffVO = personelFeign.getByUserGuid(userInfo.getUserId()).getData();
return staffVO;
}
/**
* 数据需求查询方法后置数据转换、处理
* @author xcq
* @date 2024-12-31 18:46
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
*/
private void afterQuery(PageListVO<MfDemand> pageList, PageListVO<DemandRSVO> rsPageList) {
// 需要特殊处理数据时使用
if(CollectionUtils.isNotEmpty(pageList.getRecords())){
List<String> guids = pageList.getRecords().stream().map(MfDemand::getGuid).collect(Collectors.toList());
List<DemandRSVO> results = new ArrayList<>();
Map<String, DemandUpdateStateVO> stateMap = getStateMap(guids);
for (MfDemand item : pageList.getRecords()){
DemandRSVO vo = convertToVO(item, stateMap);
results.add(vo);
}
rsPageList.setRecords(results);
}
}
//region 辅助操作
/**
* 数据需求实体数据转换为视图对象数据
* @author xcq
* @date 2024-12-31 18:46
* @param entity
* @return com.csbr.qingcloud.portal.domain.vo.DemandRSVO
*/
private DemandRSVO convertToVO(MfDemand entity,Map<String, DemandUpdateStateVO> map) {
DemandRSVO vo = csbrBeanUtil.convert(entity, DemandRSVO.class);
//流程数据处理
vo.setApproveVO(approvalFlowUtil.getApprovalInfo(entity.getGuid()));
if(map != null){
DemandUpdateStateVO voState = map.get(entity.getGuid());
if(voState != null){
vo.setResourceAcquisitionState(voState.getResourceAcquisitionState());
vo.setProductProcessingState(voState.getProductProcessingState());
vo.setProductDeliveryState(voState.getProductDeliveryState());
vo.setProductAcceptState(voState.getProductAcceptState());
vo.setAcceptFinishTime(DateUtil.getShortDate(voState.getAcceptFinishTime()));
vo.setFinishCycle(DateUtil.getDiffDay(voState.getAcceptFinishTime(),entity.getProcessingGenerateTime()));
vo.setBizName(voState.getBizName());
}
}
return vo;
}
/**
* 数据需求新增、修改和其他情况的参数转换为实体
* @author xcq
* @date 2024-12-31 18:46
* @param vo
* @return com.csbr.qingcloud.portal.mybatis.entity.MfDemand
*/
private MfDemand convertToEntity(DemandRQVO vo) {
MfDemand entity = csbrBeanUtil.convert(vo, MfDemand.class);
// 新增时数据默认guid赋值,转换后该guid可能别使用
if (StringUtils.isBlank(vo.getGuid())) {
entity.setGuid(CommonUtil.newGuid());
}
return entity;
}
//endregion
}
package com.csbr.qingcloud.portal.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.common.enums.SystemError;
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.common.util.MessageSourceUtil;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.cloud.workflow.util.ApprovalFlowUtil;
import com.csbr.qingcloud.portal.domain.vo.ChangeApproveVO;
import com.csbr.qingcloud.portal.domain.vo.ChangeInfoVO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseRQVO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO;
import com.csbr.qingcloud.portal.feign.ConfigureFeign;
import com.csbr.qingcloud.portal.feign.PersonelFeign;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveService;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService;
import com.csbr.qingcloud.portal.service.EnterpriseService;
import com.csbr.qingcloud.portal.util.ChangeInfoUtil;
import com.csbr.qingcloud.portal.util.InvokeUtil;
import com.csbr.qingcloud.portal.util.ZQConfig;
import csbr.cloud.entity.enums.ApprovalStateEnum;
import io.seata.spring.annotation.GlobalTransactional;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
/**
* @program: ms-hc-customer-service
* @description: 供应商商品变更
* @author: XiaoCQ
* @create: 2024-08-05
**/
@Component
@Slf4j
public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeApproveService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "企业变更信息";
private static final String SysFuncCode = "QYRZ";
@Autowired
private ZQConfig zqConfig;
@Autowired
private InvokeUtil invokeUtil;
@Resource
private MfEnterpriseChangeApproveService mfEnterpriseChangeApproveService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private MfEnterpriseService mfEnterpriseService;
@Resource
private EnterpriseService enterpriseService;
@Resource
private MessageSourceUtil messageSourceUtil;
@Resource
private ApprovalFlowUtil approvalFlowUtil;
@Resource
private PersonelFeign personelFeign;
@Resource
private ConfigureFeign configureFeign;
/** 保存变更数据 */
@Override
public void changeSave(ChangeApproveVO vo) {
log.info("======vo, {}", JSON.toJSONString(vo));
//对重新发起的原审批源数据进行废弃
if(StringUtils.isNotBlank(vo.getSourceApproveGuid())){
LambdaUpdateWrapper<MfEnterpriseChangeApprove> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MfEnterpriseChangeApprove::getApproveGuid,vo.getSourceApproveGuid());
updateWrapper.set(MfEnterpriseChangeApprove::getBizApproveState,"D");
mfEnterpriseChangeApproveService.update(updateWrapper);
}
//保存新数据
EnterpriseRQVO beanVO = JSON.parseObject(vo.getBizDataJson(), EnterpriseRQVO.class);
String tenantGuid = beanVO.getTenantGuid();
MfEnterpriseChangeApprove entity = csbrBeanUtil.convert(beanVO, MfEnterpriseChangeApprove.class);
setEntity(entity,beanVO,vo);
entity.setDataType("2");
entity.setBizApproveState(ApprovalStateEnum.CHECKING.getValue());
entity.setGuid(vo.getGuid());
mfEnterpriseChangeApproveService.save(entity);
//保存原数据
beanVO = JSON.parseObject(vo.getOldBizDataJson(),EnterpriseRQVO.class);
entity = csbrBeanUtil.convert(beanVO,MfEnterpriseChangeApprove.class);
setEntity(entity,beanVO,vo);
entity.setDataType("1");
entity.setGuid(CommonUtil.newGuid());
entity.setTenantGuid(tenantGuid);
mfEnterpriseChangeApproveService.save(entity);
log.info("========entity, {}", entity);
MfEnterprise bean = mfEnterpriseService.getById(entity.getSourceGuid());
bean.setBizApproveState("B");
mfEnterpriseService.updateById(bean);
}
private void setEntity(MfEnterpriseChangeApprove entity,EnterpriseRQVO customerVO,ChangeApproveVO vo){
entity.setApproveGuid(vo.getApproveGuid());
entity.setSourceGuid(vo.getSourceGuid());
entity.setZqName(vo.getZqName());
entity.setZqBizGuid(vo.getZqBizGuid());
}
/** 变更数据详细接口 */
@Override
public ChangeApproveVO changeDetail(String guid) {
//取新数据
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterpriseChangeApprove::getApproveGuid,guid);
queryWrapper.eq(MfEnterpriseChangeApprove::getDataType,"2");
List<MfEnterpriseChangeApprove> tempList = mfEnterpriseChangeApproveService.list(queryWrapper);
if(CollectionUtils.isEmpty(tempList)){
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, "未找到对应的变更数据,审批流GUID:" + guid);
}
MfEnterpriseChangeApprove bean = tempList.get(0);
ChangeApproveVO vo = new ChangeApproveVO();
vo.setGuid(bean.getGuid());
vo.setApproveGuid(bean.getApproveGuid());
vo.setSourceGuid(bean.getSourceGuid());
vo.setBizDataJson(convertToVO(bean));
//取原数据
queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterpriseChangeApprove::getApproveGuid,bean.getApproveGuid());
queryWrapper.eq(MfEnterpriseChangeApprove::getDataType,"1");
tempList = mfEnterpriseChangeApproveService.list(queryWrapper);
if(CollectionUtils.isNotEmpty(tempList)){
vo.setOldBizDataJson(convertToVO(tempList.get(0)));
}
return vo;
}
/** 执行最终的变更 */
@Override
public void changeUpdate(BizCallbackDTO dto) {
MfEnterpriseChangeApprove entity = mfEnterpriseChangeApproveService.getById(dto.getBizGuid());
LambdaUpdateWrapper<MfEnterpriseChangeApprove> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MfEnterpriseChangeApprove::getApproveGuid,entity.getApproveGuid());
updateWrapper.set(MfEnterpriseChangeApprove::getBizApproveState,dto.getApprovalState());
mfEnterpriseChangeApproveService.update(updateWrapper);
//审批不通过则将状态恢复到以前的Y
if(dto.getApprovalState().equals(ApprovalStateEnum.REJECT.getValue())){
MfEnterprise bean = mfEnterpriseService.getById(entity.getSourceGuid());
bean.setBizApproveState("Y");
mfEnterpriseService.updateById(bean);
return;
}
if (dto.getApprovalState().equals(ApprovalStateEnum.PASSED.getValue()) && !dto.getIsZqPlatformApprove()) {
//审批通过则执行更新
MfEnterprise vo = csbrBeanUtil.convert(entity,MfEnterprise.class);
vo.setGuid(entity.getSourceGuid());
vo.setBizApproveState("Y");
mfEnterpriseService.updateById(vo);
//同步更新会员表
enterpriseService.updateTenant(vo);
}
}
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public void removeByGuids(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), "数据唯一标识"));
}
String crossPlatformApproveState = "";
for (String guid : guids) {
MfEnterpriseChangeApprove entity = mfEnterpriseChangeApproveService.getById(guid);
if (entity == null) {
continue;
}
if (ApprovalStateEnum.CHECKING.getValue().equals(entity.getBizApproveState()) ||
ApprovalStateEnum.PASSED.getValue().equals(entity.getBizApproveState())) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, "审批中和审批通过的数据不能删除!");
}
mfEnterpriseChangeApproveService.removeById(guid);
// 修改企业认证审批状态
LambdaQueryWrapper<MfEnterpriseChangeApprove> lambdaQueryWrapper = Wrappers.lambdaQuery(MfEnterpriseChangeApprove.class);
lambdaQueryWrapper.eq(MfEnterpriseChangeApprove::getSourceGuid, entity.getSourceGuid());
lambdaQueryWrapper.eq(MfEnterpriseChangeApprove::getDataType, "2");
lambdaQueryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime).last("limit 1");
MfEnterpriseChangeApprove enterpriseChangeApprove = mfEnterpriseChangeApproveService.getOne(lambdaQueryWrapper);
if (ObjectUtils.isEmpty(enterpriseChangeApprove) || Arrays.asList("Y", "R", "C").contains(enterpriseChangeApprove.getBizApproveState())) {
LambdaUpdateWrapper<MfEnterprise> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MfEnterprise::getGuid, entity.getSourceGuid());
updateWrapper.set(MfEnterprise::getBizApproveState, ApprovalStateEnum.PASSED.getValue());
mfEnterpriseService.update(updateWrapper);
}
crossPlatformApproveState = entity.getCrossPlatformApproveState();
}
// 删除主平台数据
if (!zqConfig.getIsMain() && StringUtils.isNotEmpty(crossPlatformApproveState)) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("zqSystemCode", SysFuncCode + "BG");
jsonObject.put("zqBizGuids", JSON.toJSONString(guids));
jsonObject.put("isCollection", true);
invokeUtil.invokeMainDel(jsonObject, zqConfig.getAppKey(), zqConfig.getZqDelUrl());
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
}
@Override
public void crossFlowCallBack(BizCallbackDTO dto) {
MfEnterpriseChangeApprove entity = mfEnterpriseChangeApproveService.getById(dto.getBizGuid());
LambdaUpdateWrapper<MfEnterpriseChangeApprove> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MfEnterpriseChangeApprove::getApproveGuid,entity.getApproveGuid());
updateWrapper.set(MfEnterpriseChangeApprove::getBizApproveState, dto.getApprovalState());
updateWrapper.set(MfEnterpriseChangeApprove::getCrossPlatformApproveState, dto.getApprovalState());
mfEnterpriseChangeApproveService.update(updateWrapper);
//审批不通过则将状态恢复到以前的Y
if(dto.getApprovalState().equals(ApprovalStateEnum.REJECT.getValue())){
MfEnterprise bean = mfEnterpriseService.getById(entity.getSourceGuid());
bean.setBizApproveState("Y");
bean.setCrossPlatformApproveState("Y");
mfEnterpriseService.updateById(bean);
return;
}
if(dto.getApprovalState().equals(ApprovalStateEnum.PASSED.getValue())){
//审批通过则执行更新
MfEnterprise vo = csbrBeanUtil.convert(entity,MfEnterprise.class);
vo.setGuid(entity.getSourceGuid());
vo.setBizApproveState("Y");
vo.setCrossPlatformApproveState("Y");
mfEnterpriseService.updateById(vo);
//同步更新会员表
enterpriseService.updateTenant(vo);
}
}
@Override
@GlobalTransactional
public void crossRemoveByBizGuid(List<String> zqBizGuids) {
if (ObjectUtils.isEmpty(zqBizGuids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
String zqBizGuid = zqBizGuids.get(0);
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = Wrappers.lambdaQuery(MfEnterpriseChangeApprove.class);
queryWrapper.eq(MfEnterpriseChangeApprove::getZqBizGuid, zqBizGuid);
queryWrapper.eq(MfEnterpriseChangeApprove::getDataType, 2).last(" limit 1 ");
MfEnterpriseChangeApprove enterpriseChangeApprove = mfEnterpriseChangeApproveService.getOne(queryWrapper);
if (ObjectUtils.isEmpty(enterpriseChangeApprove)) {
return;
}
LambdaUpdateWrapper<MfEnterpriseChangeApprove> removeWraaper = Wrappers.lambdaUpdate(MfEnterpriseChangeApprove.class);
removeWraaper.eq(MfEnterpriseChangeApprove::getZqBizGuid, zqBizGuid);
mfEnterpriseChangeApproveService.remove(removeWraaper);
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(Collections.singletonList(enterpriseChangeApprove.getGuid()));
}
@Override
public EnterpriseRSVO getEnterpriseChangeDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfEnterpriseChangeApprove entity = mfEnterpriseChangeApproveService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
EnterpriseRSVO vo = csbrBeanUtil.convert(entity, EnterpriseRSVO.class);
//流程数据处理
vo.setApproveVO(approvalFlowUtil.getApprovalCrossTenantInfo(entity.getGuid()));
if(CollectionUtils.isEmpty(ChangeInfoUtil.areaList)){
ChangeInfoUtil.areaList = configureFeign.getBoroughCodeName().getData();
}
vo.setVenue(ChangeInfoUtil.getVenue(vo.getProvince(),vo.getCity(),vo.getDistrict()));
vo.setBusinessLicenseStartEnd(ChangeInfoUtil.getStartEnd(vo.getBusinessLicenseTerm(),vo.getBusinessLicenseStartDate(),vo.getBusinessLicenseEndDate()));
//生成变更信息
vo.setChangeList(enterpriseService.getChange(entity.getSourceGuid(), entity.getCreateTime()));
// 生成变更前的数据
vo.setBeforeChangeList(enterpriseService.beforeChangeList(entity.getApproveGuid()));
return vo;
}
/**
* 企业信息删除前置处理
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @return void
*/
private void beforeRemove(MfEnterpriseChangeApprove entity) {
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, "审批中和审批通过的数据不能删除!");
}
}
/** 转换数据 */
private String convertToVO(MfEnterpriseChangeApprove entity){
EnterpriseRSVO vo = csbrBeanUtil.convert(entity, EnterpriseRSVO.class);
return JSON.toJSONString(vo);
}
}
package com.csbr.qingcloud.portal.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.enums.WorkFlowBizEnum;
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.common.util.MessageSourceUtil;
import com.csbr.cloud.distributelock.util.RedisUtil;
import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
import com.csbr.cloud.workflow.domain.dto.appove.FlowQueryDTO;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.cloud.workflow.domain.vo.appove.ApproveVO;
import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
import com.csbr.cloud.workflow.util.ApprovalFlowUtil;
import com.csbr.cloud.workflow.util.FlowAbstractImpl;
import com.csbr.qingcloud.portal.domain.vo.*;
import com.csbr.qingcloud.portal.feign.ConfigureFeign;
import com.csbr.qingcloud.portal.feign.PersonelFeign;
import com.csbr.qingcloud.portal.feign.WorkflowFeign;
import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
import com.csbr.qingcloud.portal.mybatis.service.MfDemandService;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveService;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
import com.csbr.qingcloud.portal.service.EnterpriseService;
import com.csbr.qingcloud.portal.util.ChangeInfoUtil;
import com.csbr.qingcloud.portal.util.DateUtil;
import com.csbr.qingcloud.portal.util.InvokeUtil;
import com.csbr.qingcloud.portal.util.ZQConfig;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import csbr.cloud.entity.enums.ApprovalStateEnum;
import io.seata.spring.annotation.GlobalTransactional;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 企业信息业务逻辑实现
* @author: xcq
* @create: 2024-12-26 16:18
**/
@Slf4j
@Service
public class EnterpriseServiceImpl extends FlowAbstractImpl implements EnterpriseService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "企业信息";
private static final String SysFuncCode = "QYRZ";
@Autowired
private ZQConfig zqConfig;
@Autowired
private InvokeUtil invokeUtil;
@Resource
private MfEnterpriseService mfEnterpriseService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private ApprovalFlowUtil approvalFlowUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
@Resource
private PersonelFeign personelFeign;
@Resource
private WorkflowFeign workflowFeign;
@Resource
private RedisUtil redisUtil;
@Resource
private MfEnterpriseChangeApproveService mfEnterpriseChangeApproveService;
@Resource
private MfDemandService mfDemandService;
@Resource
private ConfigureFeign configureFeign;
/**
* 企业信息分页查询
* @author xcq
* @date 2024-12-26 16:18
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO>
*/
@Override
public PageListVO<EnterpriseRSVO> pageList(EnterpriseQueryVO queryVO) {
beforeQuery(queryVO);
if (queryVO.getIsNeedQuery()) {
LambdaQueryWrapper<MfEnterprise> queryWrapper = mfEnterpriseService.csbrQueryWrapper(queryVO, MfEnterprise.class);
queryWrapper.in(CollectionUtils.isNotEmpty(queryVO.getGuidList()), MfEnterprise::getGuid,queryVO.getGuidList());
queryWrapper.notIn(CollectionUtils.isNotEmpty(queryVO.getBizApproveStateNotList()), MfEnterprise::getBizApproveState,queryVO.getBizApproveStateNotList());
queryWrapper.orderByDesc(MfEnterprise::getCreateTime);
PageListVO<MfEnterprise> pageList = mfEnterpriseService.csbrPageList(queryVO, queryWrapper);
PageListVO<EnterpriseRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
return new PageListVO<>(0L,0L);
}
@Override
public PageListVO<EnterpriseApproveRSVO> flowPageList(FlowQueryDTO dto) {
// 调用流程获取流程数据
PageListVO<ApproveVO> pageListVO = workflowFeign.getFlowListCrossTenant(dto).getData();
PageListVO<EnterpriseApproveRSVO> rsPageList = csbrBeanUtil.convert(pageListVO, PageListVO.class);
List<ApproveVO> approveVOList = pageListVO.getRecords();
if (ObjectUtils.isNotEmpty(approveVOList)) {
// 根据业务guid查询认证表数据
List<String> guids = approveVOList.stream().map(ApproveVO::getBizGuid).toList();
List<MfEnterprise> mfEnterprises = mfEnterpriseService.listByIds(guids);
Map<String, MfEnterprise> mfEnterpriseMap = new HashMap<>();
if (ObjectUtils.isNotEmpty(mfEnterprises)) {
mfEnterpriseMap = mfEnterprises.stream().collect(Collectors.toMap(MfEnterprise::getGuid, Function.identity()));
}
// 根据业务guid查询认证变更表数据
List<MfEnterpriseChangeApprove> mfEnterpriseChangeApproves = mfEnterpriseChangeApproveService.listByIds(guids);
Map<String, MfEnterpriseChangeApprove> mfEnterpriseChangeApproveMap = new HashMap<>();
if (ObjectUtils.isNotEmpty(mfEnterpriseChangeApproves)) {
mfEnterpriseChangeApproveMap = mfEnterpriseChangeApproves.stream().collect(Collectors.toMap(MfEnterpriseChangeApprove::getGuid, Function.identity()));
}
// 数据转换
List<EnterpriseApproveRSVO> results = new ArrayList<>();
for (ApproveVO approveVO : approveVOList) {
// 补跨服务审批状态数据
EnterpriseApproveRSVO enterpriseApproveRSVO = csbrBeanUtil.convert(approveVO, EnterpriseApproveRSVO.class);
if (ObjectUtils.isNotEmpty(mfEnterpriseChangeApproveMap) && mfEnterpriseChangeApproveMap.containsKey(enterpriseApproveRSVO.getBizGuid())) {
MfEnterpriseChangeApprove mfEnterpriseChangeApprove = mfEnterpriseChangeApproveMap.get(enterpriseApproveRSVO.getBizGuid());
enterpriseApproveRSVO.setCrossPlatformApproveState(mfEnterpriseChangeApprove.getCrossPlatformApproveState());
enterpriseApproveRSVO.setZqName(mfEnterpriseChangeApprove.getZqName());
enterpriseApproveRSVO.setTenantName(mfEnterpriseChangeApprove.getTenantName());
}
if (ObjectUtils.isNotEmpty(mfEnterpriseMap) && mfEnterpriseMap.containsKey(enterpriseApproveRSVO.getBizGuid())) {
MfEnterprise mfEnterprise = mfEnterpriseMap.get(enterpriseApproveRSVO.getBizGuid());
enterpriseApproveRSVO.setCrossPlatformApproveState(mfEnterprise.getCrossPlatformApproveState());
enterpriseApproveRSVO.setZqName(mfEnterprise.getZqName());
enterpriseApproveRSVO.setTenantName(mfEnterprise.getTenantName());
}
results.add(enterpriseApproveRSVO);
}
rsPageList.setRecords(results);
}
return rsPageList;
}
/**
* 企业信息获取详情数据
* @author xcq
* @date 2024-12-26 16:18
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO
*/
@Override
public EnterpriseRSVO getEnterpriseDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfEnterprise entity = mfEnterpriseService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
EnterpriseRSVO vo = convertToVO(entity);
//生成变更信息
vo.setChangeList(getChange(guid, entity.getCreateTime()));
return vo;
}
/** 生成变更信息列表 */
@Override
public List<ChangeInfoVO> getChange(String sourceGuid, Date createTime){
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterpriseChangeApprove::getSourceGuid, sourceGuid);
queryWrapper.eq(MfEnterpriseChangeApprove::getBizApproveState, ApprovalStateEnum.PASSED.getValue());
queryWrapper.lt(MfEnterpriseChangeApprove::getCreateTime, createTime);
queryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime);
List<MfEnterpriseChangeApprove> approveList = mfEnterpriseChangeApproveService.list(queryWrapper);
if(CollectionUtils.isEmpty(approveList)){
return new ArrayList<>();
}
List<ChangeApproveBean> beanList = getChangeBeanList(approveList);
try {
if(CollectionUtils.isEmpty(ChangeInfoUtil.areaList)){
ChangeInfoUtil.areaList = configureFeign.getBoroughCodeName().getData();
}
return ChangeInfoUtil.getChangeList(beanList);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return new ArrayList<>();
}
@Override
public List<ChangeInfoVO> beforeChangeList(String approveGuid){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterpriseChangeApprove::getApproveGuid, approveGuid);
// queryWrapper.apply("DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') = '" + simpleDateFormat.format(createTime) + "'");
queryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime);
List<MfEnterpriseChangeApprove> approveList = mfEnterpriseChangeApproveService.list(queryWrapper);
if(CollectionUtils.isEmpty(approveList)){
return new ArrayList<>();
}
List<EnterpriseServiceImpl.ChangeApproveBean> beanList = getChangeBeanList(approveList);
try {
if(CollectionUtils.isEmpty(ChangeInfoUtil.areaList)){
ChangeInfoUtil.areaList = configureFeign.getBoroughCodeName().getData();
}
return ChangeInfoUtil.getChangeList(beanList);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return new ArrayList<>();
}
@Override
public EnterpriseRSVO getEnterpriseDetailByName(String tenantName) {
LambdaQueryWrapper<MfEnterprise> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterprise::getTenantName,tenantName);
List<MfEnterprise> list = mfEnterpriseService.list(queryWrapper);
if(CollectionUtils.isEmpty(list)){
return null;
}
return convertToVO(list.get(0));
}
/** 准备变更对比实体 */
private List<ChangeApproveBean> getChangeBeanList(List<MfEnterpriseChangeApprove> list){
List<ChangeApproveBean> beanList = new ArrayList<>();
for(MfEnterpriseChangeApprove item : list){
if("1".equals(item.getDataType())){
ChangeApproveBean bean = new ChangeApproveBean();
bean.oldBean = csbrBeanUtil.convert(item,MfEnterprise.class);
beanList.add(bean);
}
if("2".equals(item.getDataType())){
ChangeApproveBean bean = beanList.get(beanList.size() - 1);
bean.newBean = csbrBeanUtil.convert(item,MfEnterprise.class);
}
}
return beanList;
}
public static class ChangeApproveBean{
public MfEnterprise oldBean;
public MfEnterprise newBean;
}
/**
* 企业信息数据新增
* @author xcq
* @date 2024-12-26 16:18
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void saveEnterprise(FlowRQBaseVO flowBaseVO) {
EnterpriseRQVO rqVO = (EnterpriseRQVO) flowBaseVO;
beforeSave(rqVO);
MfEnterprise entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startWorkFlow(rqVO, approvalDTO, entity::setBizApproveState);
// 业务数据保存
boolean flag = mfEnterpriseService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(entity, rqVO);
}
/**
* 企业信息数据修改
* @author xcq
* @date 2024-12-26 16:18
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Override
public void updateEnterprise(FlowRQBaseVO flowBaseVO) {
EnterpriseRQVO rqVO = (EnterpriseRQVO) flowBaseVO;
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
// MfEnterprise oldEntity = mfEnterpriseService.getById(rqVO.getGuid());
beforeUpdate(rqVO);
MfEnterprise entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startOrRestartWorkFlow(rqVO, rqVO.getBizApproveState(), approvalDTO, entity::setBizApproveState);
if (rqVO.getIsRestart()) {
// 重新提交
againSubmitFlow(entity, rqVO, approvalDTO);
} else {
// 修改业务数据
boolean flag = mfEnterpriseService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(entity, rqVO);
}
}
/**
* 重新提交企业信息
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @param rqVO
* @param approvalDTO
* @return void
*/
private void againSubmitFlow(MfEnterprise entity, EnterpriseRQVO rqVO, AddApprovalDTO approvalDTO) {
entity.setGuid(CommonUtil.newGuid());
mfEnterpriseService.csbrBaseEntity(entity);
entity.setBizApproveState("A");
// 保存新数据
boolean flag = mfEnterpriseService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(String.format("重新提交%s",FUNCTION_NAME)));
}
// 发起新的流程
approvalDTO.setBizGuid(entity.getGuid());
approvalDTO.setUrlParam(String.format("guid=%s&name=%s&tName=%s&fType=%s&type=detail",entity.getGuid(), entity.getTenantName(),
entity.getTenantName(),WorkFlowBizEnum.ENTERPRISE_APPLY.getValue()));
approvalFlowUtil.addApproval(approvalDTO);
afterSave(entity, rqVO);
}
/**
* 企业信息数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-26 16:18
* @param guids
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(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), "数据唯一标识"));
}
String crossPlatformApproveState = "";
for (String guid : guids) {
MfEnterprise entity = mfEnterpriseService.getById(guid);
if (entity == null) {
continue;
}
if (ApprovalStateEnum.CHECKING.getValue().equals(entity.getBizApproveState()) ||
ApprovalStateEnum.PASSED.getValue().equals(entity.getBizApproveState())) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, "审批中和审批通过的数据不能删除!");
}
mfEnterpriseService.removeById(guid);
afterRemove(entity);
crossPlatformApproveState = entity.getCrossPlatformApproveState();
}
// 删除主平台数据
if (!zqConfig.getIsMain() && StringUtils.isNotEmpty(crossPlatformApproveState)) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("zqSystemCode", SysFuncCode);
jsonObject.put("zqBizGuids", JSON.toJSONString(guids));
jsonObject.put("isCollection", true);
invokeUtil.invokeMainDel(jsonObject, zqConfig.getAppKey(), zqConfig.getZqDelUrl());
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
}
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-26 16:18
* @param dto
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void flowCallBack(BizCallbackDTO dto) {
MfEnterprise entity = mfEnterpriseService.getById(dto.getBizGuid());
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(FUNCTION_NAME));
}
// 同步更新审批状态
LambdaUpdateWrapper<MfEnterprise> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(MfEnterprise::getBizApproveState, dto.getApprovalState());
updateWrapper.eq(MfEnterprise::getGuid, dto.getBizGuid());
boolean flag = mfEnterpriseService.update(updateWrapper);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(String.format("%s的业务审批状态", FUNCTION_NAME)));
}
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState()) && !dto.getIsZqPlatformApprove() && StringUtils.isEmpty(entity.getZqName())) {
String tenantName = personelFeign.getAllTenantGuidNameMap().getData().get(entity.getTenantGuid());
if("非认证会员".equals(tenantName)){
//删除原帐号并新增正式会员
TenantRQVO vo = csbrBeanUtil.convert(entity,TenantRQVO.class);
//新增会员时guid必须保证为空
vo.setGuid(null);
vo.setTenantType(null);
vo.setContactTel(entity.getContactTel());
vo.setBizGuid(dto.getBizGuid());
vo.setPersonIncharge(entity.getJuridicalPerson());
vo.setBizState("Y");
vo.setRegistrationDate(DateUtil.getDateToLocal(entity.getRegistrationDate()));
vo.setTenantLicList(getTenantLicList(entity.getBusinessLicenseJson()));
vo.setCompanyAddress(String.format("%s/%s/%s",entity.getProvince(),entity.getCity(),entity.getDistrict()));
vo.setProvince(null);
vo.setCity(null);
vo.setDistrict(null);
personelFeign.authTenant(vo).getData();
}
else{
updateTenant(entity);
}
}
}
@Override
public void crossFlowCallBack(BizCallbackDTO dto) {
MfEnterprise entity = mfEnterpriseService.getById(dto.getBizGuid());
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(FUNCTION_NAME));
}
// 同步更新审批状态
LambdaUpdateWrapper<MfEnterprise> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(MfEnterprise::getBizApproveState, dto.getApprovalState());
updateWrapper.set(MfEnterprise::getCrossPlatformApproveState, dto.getApprovalState());
updateWrapper.eq(MfEnterprise::getGuid, dto.getBizGuid());
boolean flag = mfEnterpriseService.update(updateWrapper);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(String.format("%s的业务审批状态", FUNCTION_NAME)));
}
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState())) {
String tenantName = personelFeign.getAllTenantGuidNameMap().getData().get(entity.getTenantGuid());
if("非认证会员".equals(tenantName)){
//删除原帐号并新增正式会员
TenantRQVO vo = csbrBeanUtil.convert(entity,TenantRQVO.class);
//新增会员时guid必须保证为空
vo.setGuid(null);
vo.setTenantType(null);
vo.setContactTel(entity.getContactTel());
vo.setBizGuid(dto.getBizGuid());
vo.setPersonIncharge(entity.getJuridicalPerson());
vo.setBizState("Y");
vo.setRegistrationDate(DateUtil.getDateToLocal(entity.getRegistrationDate()));
vo.setTenantLicList(getTenantLicList(entity.getBusinessLicenseJson()));
vo.setCompanyAddress(String.format("%s/%s/%s",entity.getProvince(),entity.getCity(),entity.getDistrict()));
vo.setProvince(null);
vo.setCity(null);
vo.setDistrict(null);
personelFeign.authTenant(vo).getData();
}
else{
updateTenant(entity);
}
}
}
private List<TenantLicRQVO> getTenantLicList(String json) {
if(StringUtils.isBlank(json)){
return null;
}
JSONArray array = JSON.parseArray(json);
if(array.size() == 0){
return null;
}
JSONArray itemArray = new JSONArray();
for(int i = 0; i < array.size(); i++){
JSONObject obj = array.getJSONObject(i);
//格式转换
JSONObject itemOjb = new JSONObject();
itemOjb.put("name",obj.get("name"));
itemOjb.put("path",obj.get("url"));
itemArray.add(itemOjb);
}
TenantLicRQVO item = new TenantLicRQVO();
item.setLicenseType("1");
item.setPictContentJson(JSON.toJSONString(itemArray));
List<TenantLicRQVO> list = new ArrayList<>();
list.add(item);
return list;
}
/** 将此账号提交的数据需求迁移到新的企业 */
@Override
@Transactional(rollbackFor = Exception.class)
public void moveOldData(TenantRQVO vo){
LambdaQueryWrapper<MfDemand> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfDemand::getCreateUserName, vo.getTenantName());
mfDemandService.csbrExcludeShardingLambdaQueryWrapper(queryWrapper);
List<MfDemand> list = mfDemandService.list(queryWrapper);
if(CollectionUtils.isEmpty(list)){
return;
}
List<MfDemand> newList = new ArrayList<>();
for(MfDemand item : list){
MfDemand newItem = csbrBeanUtil.convert(item,MfDemand.class,true);
newItem.setGuid(CommonUtil.newGuid());
newItem.setTenantGuid(vo.getGuid());
newItem.setShardingFlag(vo.getShardingFlag());
newItem.setRequirementUnit(vo.getTenantName());
newItem.setCreateUserName(vo.getContacts());
newItem.setUpdateUserName(vo.getContacts());
newList.add(newItem);
}
mfDemandService.saveBatch(newList);
mfDemandService.removeByIds(list);
}
/** 仅更新会员本表信息 */
@Override
public void updateTenant(MfEnterprise vo) {
//同步更新会员表
TenantRQVO tenantVO = csbrBeanUtil.convert(vo,TenantRQVO.class);
tenantVO.setGuid(vo.getTenantGuid());
tenantVO.setPersonIncharge(vo.getJuridicalPerson());
tenantVO.setTenantName(vo.getTenantName());
tenantVO.setRegisteredCapital(vo.getRegisteredCapital());
tenantVO.setRegistrationDate(DateUtil.getDateToLocal(vo.getRegistrationDate()));
tenantVO.setBankTaxNo(vo.getBankTaxNo());
tenantVO.setBusinessLicenseScope(vo.getBusinessLicenseScope());
tenantVO.setPersonIncharge(vo.getJuridicalPerson());
tenantVO.setContacts(vo.getContacts());
tenantVO.setContactTel(vo.getContactTel());
tenantVO.setCompanyAddress(String.format("%s/%s/%s",vo.getProvince(),vo.getCity(),vo.getDistrict()));
tenantVO.setTenantLicList(getTenantLicList(vo.getBusinessLicenseJson()));
personelFeign.changeUpdate(tenantVO);
}
@Override
public EnterpriseRSVO getEnterpriseDetailByLogonUser(String logonUser) {
// 根据登陆人信息查询业务数据
LambdaQueryWrapper<MfEnterprise> queryWrapper = Wrappers.lambdaQuery(MfEnterprise.class);
queryWrapper.eq(MfEnterprise::getLogonUser, logonUser);
queryWrapper.orderByDesc(MfEnterprise::getCreateTime);
List<MfEnterprise> mfEnterprises = mfEnterpriseService.list(queryWrapper);
if (ObjectUtils.isEmpty(mfEnterprises)) {
return null;
}
// 判断业务数据是否有通过
Optional<MfEnterprise> enterpriseOptional = mfEnterprises.stream().filter(item ->
ApprovalStateEnum.PASSED.getValue().equals(item.getBizApproveState())
|| "B".equals(item.getBizApproveState())
|| ApprovalStateEnum.CHECKING.getValue().equals(item.getBizApproveState())
|| "E".equals(item.getBizApproveState())).findFirst();
if (enterpriseOptional.isEmpty()) {
return null;
}
MfEnterprise mfEnterprise = enterpriseOptional.get();
EnterpriseRSVO enterpriseRSVO = convertToVO(mfEnterprise);
// 查询变更历史
LambdaQueryWrapper<MfEnterpriseChangeApprove> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(MfEnterpriseChangeApprove::getSourceGuid, mfEnterprise.getGuid());
lambdaQueryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime);
List<MfEnterpriseChangeApprove> approveList = mfEnterpriseChangeApproveService.list(lambdaQueryWrapper);
if(CollectionUtils.isEmpty(approveList)){
return enterpriseRSVO;
}
// 判断最新变更数据是否是审批中 审批中显示最新数据 驳回或通过显示最新一次审批通过数据
if ("B".equals(enterpriseRSVO.getBizApproveState())) {
Optional<MfEnterpriseChangeApprove> changeApproveOptFirst = approveList.stream().filter(item -> "2".equals(item.getDataType())).findFirst();
if (changeApproveOptFirst.isPresent()) {
enterpriseRSVO = csbrBeanUtil.convert(changeApproveOptFirst.get(), EnterpriseRSVO.class);
enterpriseRSVO.setBizApproveState(mfEnterprise.getBizApproveState());
}
}
// 只显示审批通过的变更历史
List<MfEnterpriseChangeApprove> passChangeApproves = approveList.stream().filter(item -> ApprovalStateEnum.PASSED.getValue().equals(item.getBizApproveState())).toList();
if (ObjectUtils.isNotEmpty(passChangeApproves)) {
List<ChangeApproveBean> beanList = getChangeBeanList(passChangeApproves);
try {
if(CollectionUtils.isEmpty(ChangeInfoUtil.areaList)){
ChangeInfoUtil.areaList = configureFeign.getBoroughCodeName().getData();
}
enterpriseRSVO.setChangeList(ChangeInfoUtil.getChangeList(beanList));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return enterpriseRSVO;
}
@Override
public Boolean check(EnterpriseRQVO vo) {
String tenantName = personelFeign.getAllTenantGuidNameMap().getData().get(vo.getTenantGuid());
TenantRQVO tenant = csbrBeanUtil.convert(vo,TenantRQVO.class);
if("非认证会员".equals(tenantName)){
tenant.setGuid(null);
}
else{
tenant.setGuid(vo.getTenantGuid());
}
personelFeign.checkTenant(tenant);
return true;
}
/**
* 获取发起流程参数
*
* @param entity
* @param rqVO
* @return com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO
* @author xcq
* @date 2024-12-26 16:18
*/
private AddApprovalDTO getAddApprovalDTO(MfEnterprise entity, EnterpriseRQVO rqVO) {
AddApprovalDTO approvalDTO = new AddApprovalDTO(WorkFlowBizEnum.ENTERPRISE_APPLY.getValue(), entity.getGuid());
approvalDTO.setFuncCode(SysFuncCode);
approvalDTO.setUrlParam(String.format("guid=%s&name=%s&tName=%s&fType=%s&type=detail", entity.getGuid(), entity.getTenantName(),
entity.getTenantName(), WorkFlowBizEnum.ENTERPRISE_APPLY.getValue()));
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(entity.getTenantName());
// 流程列表数据核心param参数处理
approvalDTO.setParam1(entity.getTenantName());
approvalDTO.setParam2(entity.getTenantType());
approvalDTO.setParam3(entity.getSocialCreditCode());
approvalDTO.setParam4(String.format("%s_%s_%s",entity.getJuridicalPerson(),entity.getContacts(),entity.getContactTel()));
// 增加跨服务审批字段
rqVO.setGuid(entity.getGuid());
approvalDTO.setBizData(JSON.toJSONString(rqVO));
return approvalDTO;
}
/**
* 企业信息新新增前置处理
* @author xcq
* @date 2024-12-26 16:18
* @param rqVO
* @return void
*/
private void beforeSave(EnterpriseRQVO rqVO) {
//region 1.输入基础验证
check(rqVO);
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 企业信息新增后置处理
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @param rqVO
* @return void
*/
public void afterSave(MfEnterprise entity, EnterpriseRQVO rqVO) {
// 保存认证数据
MfEnterpriseChangeApprove enterpriseChangeApprove = csbrBeanUtil.convert(entity, MfEnterpriseChangeApprove.class);
enterpriseChangeApprove.setSourceGuid(entity.getGuid());
enterpriseChangeApprove.setDataType("0");
mfEnterpriseChangeApproveService.save(enterpriseChangeApprove);
}
/**
* 企业信息修改前置校验、处理
* @author xcq
* @date 2024-12-26 16:18
* @param rqVO
* @return void
*/
private void beforeUpdate(EnterpriseRQVO rqVO) {
//region 1.输入基础验证
check(rqVO);
if (StringUtils.isBlank(rqVO.getGuid())) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010", String.format("修改%s数据",FUNCTION_NAME), "数据唯一标识"));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
LambdaQueryWrapper<MfEnterprise> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterprise::getGuid, rqVO.getGuid());
queryWrapper.select(MfEnterprise::getGuid, MfEnterprise::getBizApproveState);
MfEnterprise entity = mfEnterpriseService.getOne(queryWrapper);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
}
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
rqVO.setBizApproveState(entity.getBizApproveState());
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 企业信息修改后置处理
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @param rqVO
* @return void
*/
public void afterUpdate(MfEnterprise entity, EnterpriseRQVO rqVO) {
// 修改认证记录
MfEnterpriseChangeApprove enterpriseChangeApprove = csbrBeanUtil.convert(entity, MfEnterpriseChangeApprove.class);
enterpriseChangeApprove.setSourceGuid(entity.getGuid());
enterpriseChangeApprove.setDataType("0");
mfEnterpriseChangeApproveService.updateById(enterpriseChangeApprove);
}
/**
* 企业信息删除前置处理
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @return void
*/
private void beforeRemove(MfEnterprise entity) {
if (entity == null) {
return;
}
if (ApprovalStateEnum.CHECKING.getValue().equals(entity.getBizApproveState()) ||
ApprovalStateEnum.PASSED.getValue().equals(entity.getBizApproveState())) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, "审批中和审批通过的数据不能删除!");
}
}
/**
* 企业信息删除后置处理
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @return void
*/
private void afterRemove(MfEnterprise entity) {
}
/**
* 企业信息查询方法前置验证、处理
* @author xcq
* @date 2024-12-26 16:18
* @param rqQueryVO
* @return void
*/
private void beforeQuery(EnterpriseQueryVO rqQueryVO) {
rqQueryVO.setIsNeedQuery(true);
if (approvalFlowUtil.isQueryBizGuid(rqQueryVO)) {
rqQueryVO.setFlowType(WorkFlowBizEnum.ENTERPRISE_APPLY.getValue());
List<String> bizGuidList = approvalFlowUtil.getApprovalCrossTenantBizGuids(rqQueryVO);
if (CollectionUtils.isEmpty(bizGuidList)) {
rqQueryVO.setIsNeedQuery(false);
} else {
rqQueryVO.setGuidList(bizGuidList);
}
}
}
/**
* 企业信息查询方法后置数据转换、处理
* @author xcq
* @date 2024-12-26 16:18
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
*/
private void afterQuery(PageListVO<MfEnterprise> pageList, PageListVO<EnterpriseRSVO> rsPageList) {
if (CollectionUtils.isNotEmpty(pageList.getRecords())) {
rsPageList.setRecords(convertToVO(pageList.getRecords()));
}
// 需要特殊处理数据时使用
/*if(CollectionUtils.isNotEmpty(pageList.getRecords())){
List<EnterpriseRSVO> results = new ArrayList<>();
for (MfEnterprise item : pageList.getRecords()){
EnterpriseRSVO vo = convertToVO(item);
results.add(vo);
}
rsPageList.setRecords(results);
}*/
}
//region 辅助操作
/**
* 企业信息实体数据转换为视图对象数据(多个)
* @author xcq
* @date 2024-12-26 16:18
* @param entityList 实体数据列表
* @return java.util.List<com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO> 视图对象列表
*/
private List<EnterpriseRSVO> convertToVO(List<MfEnterprise> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
"实体数据转换为视图对象实体数据", "实体数据"));
}
List<EnterpriseRSVO> voList = new ArrayList<>(entityList.size());
for (MfEnterprise item : entityList) {
EnterpriseRSVO vo = convertToVO(item);
voList.add(vo);
}
return voList;
}
/**
* 企业信息实体数据转换为视图对象数据
* @author xcq
* @date 2024-12-26 16:18
* @param entity
* @return com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO
*/
private EnterpriseRSVO convertToVO(MfEnterprise entity) {
EnterpriseRSVO vo = csbrBeanUtil.convert(entity, EnterpriseRSVO.class);
//流程数据处理
vo.setApproveVO(approvalFlowUtil.getApprovalCrossTenantInfo(entity.getGuid()));
if(CollectionUtils.isEmpty(ChangeInfoUtil.areaList)){
ChangeInfoUtil.areaList = configureFeign.getBoroughCodeName().getData();
}
vo.setVenue(ChangeInfoUtil.getVenue(vo.getProvince(),vo.getCity(),vo.getDistrict()));
vo.setBusinessLicenseStartEnd(ChangeInfoUtil.getStartEnd(vo.getBusinessLicenseTerm(),vo.getBusinessLicenseStartDate(),vo.getBusinessLicenseEndDate()));
return vo;
}
/**
* 企业信息新增、修改和其他情况的参数转换为实体
* @author xcq
* @date 2024-12-26 16:18
* @param vo
* @return com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise
*/
private MfEnterprise convertToEntity(EnterpriseRQVO vo) {
MfEnterprise entity = csbrBeanUtil.convert(vo, MfEnterprise.class);
// 新增时数据默认guid赋值,转换后该guid可能别使用
if (StringUtils.isBlank(vo.getGuid())) {
entity.setGuid(CommonUtil.newGuid());
}
return entity;
}
//endregion
}
package com.csbr.qingcloud.portal.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.csbr.cloud.common.entity.DictModel;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.enums.WorkFlowBizEnum;
import com.csbr.qingcloud.portal.feign.ConfigureFeign;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintainDetail;
import com.csbr.qingcloud.portal.mybatis.service.MfServicerMaintainDetailService;
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.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.ServicerMaintainQueryVO;
import com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRQVO;
import com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO;
import com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintain;
import com.csbr.qingcloud.portal.mybatis.service.MfServicerMaintainService;
import com.csbr.qingcloud.portal.service.ServicerMaintainService;
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;
import java.util.Collections;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
* @description: 服务商维护业务逻辑实现
* @author: xcq
* @create: 2024-12-31 18:49
**/
@Slf4j
@Service
public class ServicerMaintainServiceImpl extends FlowAbstractImpl implements ServicerMaintainService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "服务商维护";
/**
* 流程类型
*/
private static final String FLOW_TYPE = WorkFlowBizEnum.SERVICE_MAINTAIN.getValue();
@Resource
private MfServicerMaintainService mfServicerMaintainService;
@Resource
private MfServicerMaintainDetailService mfServicerMaintainDetailService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private ApprovalFlowUtil approvalFlowUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
@Resource
private ConfigureFeign configureFeign;
/**
* 服务商维护分页查询
* @author xcq
* @date 2024-12-31 18:49
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO>
*/
@Override
public PageListVO<ServicerMaintainRSVO> pageList(ServicerMaintainQueryVO queryVO) {
beforeQuery(queryVO);
if (queryVO.getIsNeedQuery()) {
LambdaQueryWrapper<MfServicerMaintain> queryWrapper = mfServicerMaintainService.csbrQueryWrapper(queryVO, MfServicerMaintain.class);
queryWrapper.in(CollectionUtils.isNotEmpty(queryVO.getGuidList()), MfServicerMaintain::getGuid,
queryVO.getGuidList());
queryWrapper.orderByDesc(MfServicerMaintain::getCreateTime);
PageListVO<MfServicerMaintain> pageList = mfServicerMaintainService.csbrPageList(queryVO, queryWrapper);
PageListVO<ServicerMaintainRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
return new PageListVO<>(0L,0L);
}
/**
* 服务商维护获取详情数据
* @author xcq
* @date 2024-12-31 18:49
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO
*/
@Override
public ServicerMaintainRSVO getServicerMaintainDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfServicerMaintain entity = mfServicerMaintainService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
return convertToVO(entity);
}
/**
* 服务商维护数据新增
* @author xcq
* @date 2024-12-31 18:49
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void saveServicerMaintain(FlowRQBaseVO flowBaseVO) {
ServicerMaintainRQVO rqVO = (ServicerMaintainRQVO) flowBaseVO;
beforeSave(rqVO);
MfServicerMaintain entity = convertToEntity(rqVO);
if(!"Y".equals(rqVO.getBizApproveState())){
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
super.startWorkFlow(rqVO, approvalDTO, entity::setBizApproveState);
}
// 业务数据保存
boolean flag = mfServicerMaintainService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(entity, rqVO);
}
/**
* 服务商维护数据修改
* @author xcq
* @date 2024-12-31 18:49
* @param flowBaseVO
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void updateServicerMaintain(FlowRQBaseVO flowBaseVO) {
ServicerMaintainRQVO rqVO = (ServicerMaintainRQVO) flowBaseVO;
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
MfServicerMaintain oldEntity = mfServicerMaintainService.getById(rqVO.getGuid());
beforeUpdate(rqVO);
MfServicerMaintain entity = convertToEntity(rqVO);
if("Y".equals(rqVO.getBizApproveState())){
// 修改业务数据
boolean flag = mfServicerMaintainService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(entity, rqVO);
}
else{
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
super.startOrRestartWorkFlow(rqVO, rqVO.getBizApproveState(), approvalDTO, entity::setBizApproveState);
if (rqVO.getIsRestart()) {
// 重新提交
againSubmitFlow(entity, rqVO, approvalDTO);
} else {
// 修改业务数据
boolean flag = mfServicerMaintainService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, rqVO.getImmediateApprove() ?
messageSourceUtil.submitMessage(FUNCTION_NAME) : messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(entity, rqVO);
}
}
}
/**
* 重新提交服务商维护
* @author xcq
* @date 2024-12-31 18:49
* @param entity
* @param rqVO
* @param approvalDTO
* @return void
*/
private void againSubmitFlow(MfServicerMaintain entity, ServicerMaintainRQVO rqVO, AddApprovalDTO approvalDTO) {
entity.setGuid(CommonUtil.newGuid());
mfServicerMaintainService.csbrBaseEntity(entity);
entity.setBizApproveState("A");
// 保存新数据
boolean flag = mfServicerMaintainService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(String.format("重新提交%s",FUNCTION_NAME)));
}
// 发起新的流程
approvalDTO.setBizGuid(entity.getGuid());
approvalFlowUtil.addApproval(approvalDTO);
afterSave(entity, rqVO);
}
/**
* 服务商维护数据删除、并有相关的处理操作
* @author xcq
* @date 2024-12-31 18:49
* @param guids
* @return void
*/
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(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) {
MfServicerMaintain entity = mfServicerMaintainService.getById(guid);
beforeRemove(entity);
boolean flag = mfServicerMaintainService.removeById(guid);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
afterRemove(entity);
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
}
/**
* 流程结束后进行业务回调
* @author xcq
* @date 2024-12-31 18:49
* @param dto
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void flowCallBack(BizCallbackDTO dto) {
MfServicerMaintain entity = mfServicerMaintainService.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<MfServicerMaintain> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(MfServicerMaintain::getBizApproveState, dto.getApprovalState());
updateWrapper.eq(MfServicerMaintain::getGuid, dto.getBizGuid());
boolean flag = mfServicerMaintainService.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:49
* @param entity
* @return com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO
*/
private AddApprovalDTO getAddApprovalDTO(MfServicerMaintain entity) {
AddApprovalDTO approvalDTO = new AddApprovalDTO(FLOW_TYPE, entity.getGuid());
// todo
approvalDTO.setFuncCode("FWSWH");
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(String.format("%s,%s",entity.getCreateUserName(),entity.getTenantName()));
// 流程列表数据核心param参数处理
approvalDTO.setParam1(null);
approvalDTO.setParam2(null);
approvalDTO.setParam3(null);
approvalDTO.setParam4(null);
return approvalDTO;
}
/**
* 服务商维护新新增前置处理
* @author xcq
* @date 2024-12-31 18:49
* @param rqVO
* @return void
*/
private void beforeSave(ServicerMaintainRQVO rqVO) {
//region 1.输入基础验证
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 服务商维护新增后置处理
* @author xcq
* @date 2024-12-31 18:49
* @param entity
* @param rqVO
* @return void
*/
private void afterSave(MfServicerMaintain entity, ServicerMaintainRQVO rqVO) {
List<MfServicerMaintainDetail> details = JSON.parseArray(entity.getMaintainJson(),MfServicerMaintainDetail.class);
for(MfServicerMaintainDetail item : details){
item.setGuid(CommonUtil.newGuid());
item.setTenantGuid(entity.getTenantGuid());
item.setParentGuid(entity.getGuid());
}
mfServicerMaintainDetailService.saveBatch(details);
}
/**
* 服务商维护修改前置校验、处理
* @author xcq
* @date 2024-12-31 18:49
* @param rqVO
* @return void
*/
private void beforeUpdate(ServicerMaintainRQVO rqVO) {
//region 1.输入基础验证
if (StringUtils.isBlank(rqVO.getGuid())) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010", String.format("修改%s数据",FUNCTION_NAME), "数据唯一标识"));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
LambdaQueryWrapper<MfServicerMaintain> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfServicerMaintain::getGuid, rqVO.getGuid());
queryWrapper.select(MfServicerMaintain::getGuid, MfServicerMaintain::getBizApproveState);
MfServicerMaintain entity = mfServicerMaintainService.getOne(queryWrapper);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
}
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 服务商维护修改后置处理
* @author xcq
* @date 2024-12-31 18:49
* @param entity
* @param rqVO
* @return void
*/
protected void afterUpdate(MfServicerMaintain entity, ServicerMaintainRQVO rqVO) {
LambdaUpdateWrapper<MfServicerMaintainDetail> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MfServicerMaintainDetail::getParentGuid,entity.getGuid());
mfServicerMaintainDetailService.remove(updateWrapper);
List<MfServicerMaintainDetail> details = JSON.parseArray(entity.getMaintainJson(),MfServicerMaintainDetail.class);
for(MfServicerMaintainDetail item : details){
item.setGuid(CommonUtil.newGuid());
item.setTenantGuid(entity.getTenantGuid());
item.setParentGuid(entity.getGuid());
}
mfServicerMaintainDetailService.saveBatch(details);
}
/**
* 服务商维护删除前置处理
* @author xcq
* @date 2024-12-31 18:49
* @param entity
* @return void
*/
private void beforeRemove(MfServicerMaintain entity) {
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 xcq
* @date 2024-12-31 18:49
* @param entity
* @return void
*/
private void afterRemove(MfServicerMaintain entity) {
}
/**
* 服务商维护查询方法前置验证、处理
* @author xcq
* @date 2024-12-31 18:49
* @param rqQueryVO
* @return void
*/
private void beforeQuery(ServicerMaintainQueryVO 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 xcq
* @date 2024-12-31 18:49
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
*/
private void afterQuery(PageListVO<MfServicerMaintain> pageList, PageListVO<ServicerMaintainRSVO> rsPageList) {
if (CollectionUtils.isNotEmpty(pageList.getRecords())) {
rsPageList.setRecords(convertToVO(pageList.getRecords()));
}
// 需要特殊处理数据时使用
/*if(CollectionUtils.isNotEmpty(pageList.getRecords())){
List<ServicerMaintainRSVO> results = new ArrayList<>();
for (MfServicerMaintain item : pageList.getRecords()){
ServicerMaintainRSVO vo = convertToVO(item);
results.add(vo);
}
rsPageList.setRecords(results);
}*/
}
//region 辅助操作
/**
* 服务商维护实体数据转换为视图对象数据(多个)
* @author xcq
* @date 2024-12-31 18:49
* @param entityList 实体数据列表
* @return java.util.List<com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO> 视图对象列表
*/
private List<ServicerMaintainRSVO> convertToVO(List<MfServicerMaintain> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
"实体数据转换为视图对象实体数据", "实体数据"));
}
List<ServicerMaintainRSVO> voList = new ArrayList<>(entityList.size());
for (MfServicerMaintain item : entityList) {
ServicerMaintainRSVO vo = convertToVO(item);
voList.add(vo);
}
return voList;
}
/**
* 服务商维护实体数据转换为视图对象数据
* @author xcq
* @date 2024-12-31 18:49
* @param entity
* @return com.csbr.qingcloud.portal.domain.vo.ServicerMaintainRSVO
*/
private ServicerMaintainRSVO convertToVO(MfServicerMaintain entity) {
ServicerMaintainRSVO vo = csbrBeanUtil.convert(entity, ServicerMaintainRSVO.class);
//流程数据处理
vo.setApproveVO(approvalFlowUtil.getApprovalInfo(entity.getGuid()));
vo.setTenantTypeName(getTypeName(entity.getTenantType()));
return vo;
}
private List<DictModel> dicList = new ArrayList<>();
private String getTypeName(String tenantType) {
if (CollectionUtils.isEmpty(dicList)) {
dicList = configureFeign.getDictListByType("客户类型").getData();
}
for(DictModel item : dicList){
if(item.getValue().equals(tenantType)){
return item.getText();
}
if(CollectionUtils.isNotEmpty(item.getChildDictList())){
for(DictModel child : item.getChildDictList()){
if(child.getValue().equals(tenantType)){
return child.getText();
}
}
}
}
return tenantType;
}
/**
* 服务商维护新增、修改和其他情况的参数转换为实体
* @author xcq
* @date 2024-12-31 18:49
* @param vo
* @return com.csbr.qingcloud.portal.mybatis.entity.MfServicerMaintain
*/
private MfServicerMaintain convertToEntity(ServicerMaintainRQVO vo) {
MfServicerMaintain entity = csbrBeanUtil.convert(vo, MfServicerMaintain.class);
// 新增时数据默认guid赋值,转换后该guid可能别使用
if (StringUtils.isBlank(vo.getGuid())) {
entity.setGuid(CommonUtil.newGuid());
}
return entity;
}
//endregion
}
package com.csbr.qingcloud.portal.util;
import com.csbr.cloud.common.util.CommonUtil;
import com.csbr.cloud.common.util.CsbrBeanUtil;
import com.csbr.qingcloud.portal.domain.vo.BoroughPOJO;
import com.csbr.qingcloud.portal.domain.vo.ChangeInfoVO;
import com.csbr.qingcloud.portal.domain.vo.CompareResult;
import com.csbr.qingcloud.portal.feign.ConfigureFeign;
import com.csbr.qingcloud.portal.service.impl.EnterpriseServiceImpl;
import jakarta.annotation.Resource;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class ChangeInfoUtil {
public static List<BoroughPOJO> areaList;
/** 计算变更信息 */
public static List<ChangeInfoVO> getChangeList(List<EnterpriseServiceImpl.ChangeApproveBean> beanList) throws IllegalAccessException {
List<ChangeInfoVO> list = new ArrayList<>();
//循环对比每组记录生来变更内容
for(EnterpriseServiceImpl.ChangeApproveBean item : beanList){
if(item.oldBean == null || item.newBean == null){
continue;
}
List<CompareResult> diffList = ObjectUtil.getBeanDiff(item.oldBean,item.newBean);
getVenueResult(item,list);
getStartEndResult(item,list);
getRegistrationDateResult(item,list);
getRegisteredCapitalResult(item,list);
for(CompareResult diffItem : diffList){
if(diffItem.getFieldComment().contains("审批状态") || diffItem.getFieldComment().contains("营业执照")
|| diffItem.getFieldComment().contains("法人证件照") || diffItem.getFieldComment().contains("管理员证件照")
|| diffItem.getFieldComment().contains("授权委托书") || diffItem.getFieldComment().contains("省")
|| diffItem.getFieldComment().contains("市") || diffItem.getFieldComment().contains("区")
|| diffItem.getFieldComment().contains("营业开始日期") || diffItem.getFieldComment().contains("营业结束日期") || diffItem.getFieldComment().contains("营业期限")
|| diffItem.getFieldComment().contains("注册日期") || diffItem.getFieldComment().contains("注册资本")){
continue;
}
list.add(getChangeInfoVO(item,diffItem));
}
}
list = list.stream().sorted(Comparator.comparing(ChangeInfoVO::getNameEn).thenComparing(ChangeInfoVO::getDate).reversed()).collect(Collectors.toList());
return list;
}
private static ChangeInfoVO getChangeInfoVO(EnterpriseServiceImpl.ChangeApproveBean item,CompareResult diffItem){
ChangeInfoVO vo = new ChangeInfoVO();
vo.setNameEn(diffItem.getFieldName());
vo.setName(diffItem.getFieldComment());
vo.setDate(DateUtil.getDateToString(item.oldBean.getCreateTime()));
vo.setBefore(diffItem.getOldValue() == null ? "" : diffItem.getOldValue().toString());
vo.setAfter(diffItem.getNewValue() == null ? "" : diffItem.getNewValue().toString());
vo.setGuid(CommonUtil.newGuid());
return vo;
}
private static void getRegisteredCapitalResult(EnterpriseServiceImpl.ChangeApproveBean item, List<ChangeInfoVO> list) {
String oldValue = getRegisteredCapital(item.oldBean.getRegisteredCapital());
String newValue = getRegisteredCapital(item.newBean.getRegisteredCapital());
if(!oldValue.equals(newValue)){
list.add(getChangeInfoVO(item,getCompareResult("注册资本(万元)","registeredCapital",oldValue,newValue)));
}
}
private static String getRegisteredCapital(BigDecimal v) {
if(v == null){
return "";
}
return v.setScale(2, RoundingMode.HALF_DOWN).toString();
}
public static void getVenueResult(EnterpriseServiceImpl.ChangeApproveBean item, List<ChangeInfoVO> list) {
String oldValue = getVenue(item.oldBean.getProvince(),item.oldBean.getCity(),item.oldBean.getDistrict());
String newValue = getVenue(item.newBean.getProvince(),item.newBean.getCity(),item.newBean.getDistrict());
if(!oldValue.equals(newValue)){
list.add(getChangeInfoVO(item,getCompareResult("注册地","venue",oldValue,newValue)));
}
}
public static void getRegistrationDateResult(EnterpriseServiceImpl.ChangeApproveBean item, List<ChangeInfoVO> list) {
String oldValue = getRegistrationDate(item.oldBean.getRegistrationDate());
String newValue = getRegistrationDate(item.newBean.getRegistrationDate());
if(!oldValue.equals(newValue)){
list.add(getChangeInfoVO(item,getCompareResult("注册日期","registrationDate",oldValue,newValue)));
}
}
private static String getRegistrationDate(Date date) {
return DateUtil.getShortDateToString(date);
}
private static CompareResult getCompareResult(String comment,String name,String oldVenue,String newVenue){
CompareResult result = new CompareResult();
result.setFieldComment(comment);
result.setFieldName(name);
result.setOldValue(oldVenue);
result.setNewValue(newVenue);
return result;
}
public static void getStartEndResult(EnterpriseServiceImpl.ChangeApproveBean item, List<ChangeInfoVO> list) {
String oldValue = getStartEnd(item.oldBean.getBusinessLicenseTerm(),item.oldBean.getBusinessLicenseStartDate(),item.oldBean.getBusinessLicenseEndDate());
String newValue = getStartEnd(item.newBean.getBusinessLicenseTerm(),item.newBean.getBusinessLicenseStartDate(),item.newBean.getBusinessLicenseEndDate());
if(!oldValue.equals(newValue)){
list.add(getChangeInfoVO(item,getCompareResult("营业期限","businessLicenseStartEnd",oldValue,newValue)));
}
}
public static String getVenue(String province, String city, String district) {
if(StringUtils.isBlank(district)){
return String.format("%s/%s",getName(province),getName(city));
}
else{
return String.format("%s/%s/%s",getName(province),getName(city),getName(district));
}
}
private static String getName(String code){
List<String> names = areaList.stream().filter(x->x.getCode().equals(code)).map(BoroughPOJO::getName).collect(Collectors.toList());
if(CollectionUtils.isEmpty(names)){
return "";
}
return names.get(0);
}
public static String getStartEnd(String businessLicenseTerm, Date businessLicenseStartDate, Date businessLicenseEndDate) {
if("1".equals(businessLicenseTerm)){
return "长期有效";
}
return String.format("%s至%s",DateUtil.getShortDateToString(businessLicenseStartDate),DateUtil.getShortDateToString(businessLicenseEndDate));
}
}
package com.csbr.qingcloud.portal.util;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateUtil {
/** 时间相差多少天 无视小时 */
public static int getDiffDay(Date one, Date two) {
if(one == null || two == null){
return 0;
}
one = getDateByString(getShortDateToString(one));
two = getDateByString(getShortDateToString(two));
long difference = (one.getTime() - two.getTime()) / 86400000;
return (int) Math.abs(difference);
}
/** 字符串时间转日期 */
public static Date getDateByString(String time){
try {
return new SimpleDateFormat("yyyy-MM-dd").parse(time);
} catch (Exception e) {
return new Date();
}
}
/** 时间转字符串 */
public static String getDateToString(Date time){
if(time == null) {
return "";
}
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time);
}
/** 时间转字符串 */
public static String getShortDateToString(Date time){
if(time == null) {
return "";
}
return new SimpleDateFormat("yyyy-MM-dd").format(time);
}
/** 时间转本地时间 */
public static LocalDateTime getDateToLocal(Date time){
if(time == null) {
return null;
}
return time.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
/** 字符串时间转日期 */
public static Date getShortDate(Date time){
if(time == null) {
return null;
}
try {
return new SimpleDateFormat("yyyy-MM-dd").parse(getShortDateToString(time));
} catch (Exception e) {
return new Date();
}
}
}
package com.csbr.qingcloud.portal.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.response.CommonRes;
import lombok.extern.slf4j.Slf4j;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.util.Timeout;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
/**
* @program: daop-projects
* @description:
* @author: xiaojie
* @create: 2025-03-13 14:52
**/
@Component
@Slf4j
public class InvokeUtil {
@Autowired
private RestTemplate restTemplate;
/**
* open调用接口
* @param jsonObject
* @param appKey
* @param zqDelUrl
*/
public void invokeMainDel(JSONObject jsonObject, String appKey, String zqDelUrl) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("appKey", appKey);
HttpEntity<JSONObject> requestEntity = new HttpEntity<>(jsonObject, headers);
restTemplate.setRequestFactory(getFactory());
CommonRes commonRes = restTemplate.postForObject(zqDelUrl, requestEntity, CommonRes.class);
if (!CommonRes.success().getCode().equals(commonRes.getCode())) {
throw new CsbrSystemException(SystemError.ERROR_CODE, commonRes.getMsg());
} else {
CommonRes commonResData = JSON.parseObject(String.valueOf(commonRes.getData()), CommonRes.class);
if (!CommonRes.success().getCode().equals(commonResData.getCode())) {
throw new CsbrSystemException(SystemError.ERROR_CODE, commonResData.getMsg());
}
}
}
private ClientHttpRequestFactory getFactory() {
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(Timeout.ofSeconds(5000)) // 连接超时
.setConnectionRequestTimeout(Timeout.ofSeconds(5000)) // 从连接池获取连接的超时时间
.setResponseTimeout(Timeout.ofSeconds(10000)) // 数据读取超时
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(config)
.build();
return new HttpComponentsClientHttpRequestFactory(httpClient);
}
}
\ No newline at end of file
package com.csbr.qingcloud.portal.util;
import com.csbr.qingcloud.portal.domain.vo.CompareResult;
import jdk.jfr.Name;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** 对象工具 */
public class ObjectUtil {
/** 对比两个对象 */
public static List<CompareResult> getBeanDiff(Object oldObj, Object newObj) throws IllegalAccessException {
List<CompareResult> list = new ArrayList<>();
//获取对象的class
Class<?> clazz1 = oldObj.getClass();
Class<?> clazz2 = newObj.getClass();
//获取对象的属性列表
Field[] field1 = clazz1.getDeclaredFields();
Field[] field2 = clazz2.getDeclaredFields();
//遍历属性列表field1
for (int i = 0; i < field1.length; i++) {
//遍历属性列表field2
for (int j = 0; j < field2.length; j++) {
CompareResult r = getCompareResult(field1[i], field2[j], oldObj, newObj);
if (r == null) {
continue;
}
list.add(r);
break;
}
}
return list;
}
/** 对比两个字段 */
public static CompareResult getCompareResult(Field oldField, Field newField, Object oldObj, Object newObj) throws IllegalAccessException {
//字段名称不同-返回空
if (!oldField.getName().equals(newField.getName())) {
return null;
}
oldField.setAccessible(true);
newField.setAccessible(true);
//值相同-返回空
if (compareTwo(oldField.get(oldObj), newField.get(newObj))) {
return null;
}
CompareResult r = new CompareResult();
r.setFieldName(oldField.getName());
r.setOldValue(oldField.get(oldObj));
r.setNewValue(newField.get(newObj));
try {
r.setFieldComment(oldField.getAnnotation(Name.class) == null ? "" : oldField.getAnnotation(Name.class).value());
} catch (Exception e) {
r.setFieldComment("");
}
if (oldField.getType() == Date.class) {
r.setOldValue(DateUtil.getDateToString((Date)oldField.get(oldObj)));
r.setNewValue(DateUtil.getDateToString((Date)oldField.get(newObj)));
}
return r;
}
/** 对比两个数据是否内容相同 */
public static boolean compareTwo(Object object1, Object object2) {
if (object1 == null && object2 == null) {
return true;
}
if (object1 != null && object2 == null) {
return false;
}
if (object2 != null && object1 == null) {
return false;
}
if (object1.equals(object2)) {
return true;
}
if("BigDecimal".equals(object2.getClass().getSimpleName())){
BigDecimal obj1 = (BigDecimal)object1;
BigDecimal obj2 = (BigDecimal)object2;
if(obj1.compareTo(obj2) == 0){
return true;
}
}
String obj1 = object1.toString().replace("[","").replace("]","").replace("\"","").replace(" ","");
String obj2 = object2.toString().replace("[","").replace("]","").replace("\"","").replace(" ","");
if (obj1.equals(obj2)) {
return true;
}
return false;
}
}
package com.csbr.qingcloud.portal.util;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @program: daop-projects
* @description:
* @author: xiaojie
* @create: 2025-02-28 14:09
**/
@Data
@Component
@ConfigurationProperties(prefix = "csbr.zq")
public class ZQConfig {
private String appKey = "672c2c38e4b0cac8732a6106";
private String zqName = "";
private String zqDelUrl = "";
private String groundingPickUrl = "";
private Boolean isMain = false;
}
\ No newline at end of file
......@@ -18,7 +18,7 @@ spring:
enabled: true
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
ip: 192.168.6.20
port: 19207
port: 19210
group: develop
namespace: daop-lt
metadata:
......
spring:
main:
allow-bean-definition-overriding: true
application:
name: ms-data-circulation-portal-service
cloud:
nacos:
#配置中心
config:
server-addr: nacos-cluster-service.nacos-cluster:8848
file-extension: yaml
group: enterprise-release
namespace: daop-lt
# 开启nacos自动刷新,如果这个配置没有或者为false会导致配置不能自动刷新(auto-refresh、enable-remote-sync-config两者缺一不可)
auto-refresh: true
# 允许nacos服务端向本地同步配置
enable-remote-sync-config: true
#注册中心
discovery:
enabled: true
server-addr: nacos-cluster-service.nacos-cluster:8848
group: enterprise-release
namespace: daop-lt
metadata:
code: "004"
user:
name: nacos
password: nacos
management:
context-path: /actuator
#接口限流
sentinel:
transport:
# port: 7777
dashboard: sentinel-service.nacos-cluster:8858
#取消懒加载
eager: true
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: '*'
###暂时禁用rabbit的健康检查
health:
rabbit:
enabled: false
sentinel:
enabled: false
feign:
sentinel:
enabled: true
\ No newline at end of file
......@@ -4,7 +4,7 @@
<springProperty scope="context" name="app_name" source="spring.application.name"/>
<contextName>${app_name}</contextName>
<!-- 包含 logback 的基础配置,路径就是所在包 -->
<include resource="com/csbr/cloud/common/logback/logback-base.xml"/>
<include resource="com/csbr/cloud/base/logback/logback-base.xml"/>
<!-- 增加skywalking配置日志收集-->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
......@@ -27,11 +27,11 @@
<springProperty scope="context" name="topci_prefix" source="csbr.kafka.topic-prefix" />
<!-- 输出到Kafka -->
<appender name="kafkaAppender" class="com.csbr.cloud.common.logback.KafkaAppender">
<appender name="kafkaAppender" class="com.csbr.cloud.log.logback.KafkaAppender">
<bootstrapServers>${kafka_server}</bootstrapServers>
<topic>csbr_fbt_log</topic>
<prefix>${topci_prefix}</prefix>
<formatter class="com.csbr.cloud.common.logback.JsonFormatter">
<formatter class="com.csbr.cloud.log.logback.JsonFormatter">
<expectJson>false</expectJson>
</formatter>
</appender>
......
......@@ -3,7 +3,7 @@
<!-- 本地服务的名称 -->
<property name="app_name" value="ms-data-circulation-portal-service"/>
<!-- 包含 logback 的基础配置,路径就是所在包 -->
<include resource="com/csbr/cloud/common/logback/logback-base.xml"/>
<include resource="com/csbr/cloud/base/logback/logback-base.xml"/>
<!-- 控制打印输出的内容 -->
<root level="INFO">
<appender-ref ref="FILE_ERROR"/>
......
......@@ -14,10 +14,10 @@ spring:
compatibility-verifier:
enabled: false
gateway:
gatewayServiceName: gateway-server
host: 114.115.131.96
gatewayServiceName: ms-daop-gateway-server
host: https://daop-lt-test.zgsjzc.com/api
kafka:
bootstrap-servers: kafka-cs-develop.daop:9092
bootstrap-servers: kafka-cs-test.zk-kafka:9092
producer:
retries: 3
main:
......@@ -52,16 +52,16 @@ spring:
##由mycat管理读写分离 不用代码控制(填写mycat的链接库)
datasource:
master:
url: jdbc:mysql://192.168.6.21:3307/csbr_data_circulation_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
username: prg
password: E5t391s349wT@3
url: jdbc:mysql://192.168.5.28:3307/csbr_data_circulation_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
username: sharding
password: dJ5xF7qC
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
slave:
url: jdbc:mysql://192.168.6.21:3307/csbr_data_circulation_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
username: prg
password: E5t391s349wT@3
url: jdbc:mysql://192.168.5.28:3307/csbr_data_circulation_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
username: sharding
password: dJ5xF7qC
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
......@@ -72,11 +72,11 @@ spring:
#cluster:
# nodes: redis-service.redis:6379
# 单节点
host: redis-service.daop
host: redis-service.daop-test
port: 6379
password: "J7e411m693cA9"
timeout: 1000
prefix: daop-test
prefix: daop-develop
jedis:
pool:
max-idle: 8
......@@ -91,7 +91,7 @@ spring:
encoding: UTF-8
mode: never
redisson:
address: redis://redis-service.daop:6379
address: redis://redis-service.daop-test:6379
password: "J7e411m693cA9"
seata:
......@@ -101,12 +101,12 @@ seata:
registry:
type: nacos
nacos:
application: seata-server
application: ms-daop-seata-service
cluster: seata-cluster
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
password: U9u457p155vH@8
server-addr: nacos-cluster-service.nacos-cluster:8848
password: Q1p534i9
username: nacos
namespace: daop-lt
namespace: daop-master
group: test
service:
vgroupMapping:
......@@ -139,13 +139,13 @@ pagehelper:
csbr:
kafka:
topic-prefix: DAOP-LT-TEST
topic-prefix: DAOP-LT-DEVELOP
consumer:
# 开启kafka消费者
enable: true
# kafka 服务集群地址,格式:HOST:PORT ,用逗号隔开
# bootstrap-servers: 210.12.100.201:9092
bootstrap-servers: kafka-cs-develop.daop:9092
bootstrap-servers: kafka-cs-test.zk-kafka:9092
# bootstrap-servers: 192.168.3.120:9092
# 是否启用自动提交 offset
enable-auto-commit: false
......@@ -170,7 +170,7 @@ csbr:
enable: true
# kafka 服务集群地址,格式:HOST:PORT ,多地址用逗号隔开
# bootstrap-servers: 210.12.100.201:9092
bootstrap-servers: kafka-cs-develop.daop:9092
bootstrap-servers: kafka-cs-test.zk-kafka:9092
# bootstrap-servers: 192.168.3.120:9092
# 失败后的重发次数
retries: 0
......@@ -187,3 +187,8 @@ feign:
query-limit:
white: TrTaskValid
csbrcloud:
shardingFlag: true
logging:
config: classpath:logback.xml
\ No newline at end of file
......
......@@ -5,7 +5,7 @@ spring:
nacos:
#配置中心
config:
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
server-addr: nacos-cluster-service.nacos-cluster:8848
file-extension: yaml
group: test
namespace: daop-lt
......@@ -16,14 +16,14 @@ spring:
#注册中心
discovery:
enabled: true
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
server-addr: nacos-cluster-service.nacos-cluster:8848
group: test
namespace: daop-lt
metadata:
code: "006"
user:
name: nacos
password: nacos
password: Q1p534i9
management:
context-path: /actuator
#接口限流
......
......@@ -65,34 +65,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
# redis配置
data:
redis:
# 集群
#cluster:
# nodes: redis-service.redis:6379
# 单节点
host: redis-service.daop
port: 6379
password: "J7e411m693cA9"
timeout: 1000
prefix: daop-release
jedis:
pool:
max-idle: 8
max-wait: 2000
min-idle: 0
max-active: 100
test-on-borrow: true
test-while-idle: true
sql:
init:
schema-locations: classpath*:init.sql
encoding: UTF-8
mode: never
redisson:
address: redis://redis-service.daop:6379
password: "J7e411m693cA9"
seata:
enabled: true # 1.0新特性,需要依赖seata-spring-boot-starter,默认为true
......
......@@ -5,7 +5,7 @@ spring:
nacos:
#配置中心
config:
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
server-addr: nacos-cluster-service.nacos-cluster:8848
file-extension: yaml
group: release
namespace: daop-master
......@@ -16,7 +16,7 @@ spring:
#注册中心
discovery:
enabled: true
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
server-addr: nacos-cluster-service.nacos-cluster:8848
group: release
namespace: daop-master
metadata:
......
......@@ -65,34 +65,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
# redis配置
data:
redis:
# 集群
#cluster:
# nodes: redis-service.redis:6379
# 单节点
host: redis-service.daop
port: 6379
password: "J7e411m693cA9"
timeout: 1000
prefix: daop-release
jedis:
pool:
max-idle: 8
max-wait: 2000
min-idle: 0
max-active: 100
test-on-borrow: true
test-while-idle: true
sql:
init:
schema-locations: classpath*:init.sql
encoding: UTF-8
mode: never
redisson:
address: redis://redis-service.daop:6379
password: "J7e411m693cA9"
seata:
enabled: true # 1.0新特性,需要依赖seata-spring-boot-starter,默认为true
......@@ -187,3 +160,5 @@ feign:
query-limit:
white: TrTaskValid
isTenantAndHospital: false
......
......@@ -5,7 +5,7 @@ spring:
nacos:
#配置中心
config:
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
server-addr: nacos-cluster-service.nacos-cluster:8848
file-extension: yaml
group: release
namespace: daop-lt
......@@ -16,7 +16,7 @@ spring:
#注册中心
discovery:
enabled: true
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
server-addr: nacos-cluster-service.nacos-cluster:8848
group: release
namespace: daop-lt
metadata:
......
server:
port: 19210
monitor:
log-white:
#服务全局名称
spring:
application:
name: ms-data-circulation-portal-service
jackson:
time-zone: Asia/Shanghai
cloud:
inetutils:
ignored-interfaces: docker0 # 让应用忽略docker0网卡
compatibility-verifier:
enabled: false
gateway:
gatewayServiceName: gateway-server
host: 114.115.131.96
kafka:
bootstrap-servers: kafka-cs-develop.daop:9092
producer:
retries: 3
main:
allow-bean-definition-overriding: true
datasource:
sql-script-encoding: utf-8
#type: org.apache.commons.dbcp2.BasicDataSource
#如果使用TCC事务这个type必须指定,否则会抛出: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection;
dynamic:
primary: master
druid:
initial-size: 0
max-active: 50
min-idle: 2
max-wait: -1
min-evictable-idle-time-millis: 30000
max-evictable-idle-time-millis: 30000
time-between-eviction-runs-millis: 0
validation-query: select 1
validation-query-timeout: -1
test-on-borrow: false
test-on-return: false
test-while-idle: true
pool-prepared-statements: true
# max-open-prepared-statements: 100
filters: stat,wall
share-prepared-statements: true
wall:
config:
condition-double-const-allow: true
condition-and-alway-true-allow: true
##由mycat管理读写分离 不用代码控制(填写mycat的链接库)
datasource:
master:
url: jdbc:mysql://192.168.6.21:3306/csbr_data_circulation_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
username: sharding
password: dJ5xF7qC
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
slave:
url: jdbc:mysql://192.168.6.21:3306/csbr_data_circulation_portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000
username: sharding
password: dJ5xF7qC
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
# redis配置
data:
redis:
# 集群
#cluster:
# nodes: redis-service.redis:6379
# 单节点
#host: redis-service.daop
#port: 6379
#password: "J7e411m693cA9"
timeout: 1000
prefix: daop-release
jedis:
pool:
max-idle: 8
max-wait: 2000
min-idle: 0
max-active: 100
test-on-borrow: true
test-while-idle: true
sql:
init:
schema-locations: classpath*:init.sql
encoding: UTF-8
mode: never
redisson:
address: redis://redis-service.daop:6379
password: "J7e411m693cA9"
seata:
enabled: true # 1.0新特性,需要依赖seata-spring-boot-starter,默认为true
tx-service-group: my_test_tx_group
application-id: ms-data-circulation-portal-service
registry:
type: nacos
nacos:
application: seata-server
cluster: seata-cluster
server-addr: nacos-cluster-service-develop.nacos-cluster:8848
password: U9u457p155vH@8
username: nacos
namespace: daop-lt
group: release
service:
vgroupMapping:
my_test_tx_group: seata-cluster
grouplist:
default: ms-daop-seata-service-release:8091
#数据库字段开启驼峰
mybatis:
configuration:
map-underscore-to-camel-case: true
callSettersOnNulls: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus:
global-config:
db-config:
id-type: ASSIGN_UUID
logic-delete-value: "null"
logic-not-delete-value: N
mapper-locations: classpath*:mapper/**/*Mapper.xml
type-aliases-package: com.csbr.qingcloud.common.mybatis
##生产环境屏蔽此配置 优化性能
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
csbr:
kafka:
topic-prefix: DAOP-LT-RELEASE
consumer:
# 开启kafka消费者
enable: true
# kafka 服务集群地址,格式:HOST:PORT ,用逗号隔开
# bootstrap-servers: 210.12.100.201:9092
bootstrap-servers: kafka-cs-develop.daop:9092
# bootstrap-servers: 192.168.3.120:9092
# 是否启用自动提交 offset
enable-auto-commit: false
# 自动提交间隔时间(MS),仅在自动提交开启时有效
auto-commit-interval: 100
# 自动重置 offset。 latest:从最后开始,earliest: 从 offset 为 0 开始
auto-offset-reset: latest
# 消息 key 的反序列化方法
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# 消息 value 的反序列化方法
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# listener 开启的线程数
concurrency: 2
# session 超时时间
session-timeout: 60000
# 最大 poll 消息间隔时间,如果处理时间过长会导致异常
max-poll-interval: 10000
# 最大 poll 消息数量
max-poll-records: 2
producer:
# 开启kafka生产者
enable: true
# kafka 服务集群地址,格式:HOST:PORT ,多地址用逗号隔开
# bootstrap-servers: 210.12.100.201:9092
bootstrap-servers: kafka-cs-develop.daop:9092
# bootstrap-servers: 192.168.3.120:9092
# 失败后的重发次数
retries: 0
# 一次最多发送的数据量
batch-size: 4096
# 32M批处理缓冲区
buffer-memory: 33554432
# 生产者生产消息间隔,数值越大,间隔越长,用来减缓消费压力
linger: 1
feign:
hystrix:
enabled: false
query-limit:
white: TrTaskValid
isTenantAndHospital: false
spring:
application:
name: ms-data-circulation-portal-service
cloud:
nacos:
#配置中心
config:
server-addr: nacos-cluster-service.nacos-cluster:8848
file-extension: yaml
group: zq-release
namespace: daop-lt
# 开启nacos自动刷新,如果这个配置没有或者为false会导致配置不能自动刷新(auto-refresh、enable-remote-sync-config两者缺一不可)
auto-refresh: true
# 允许nacos服务端向本地同步配置
enable-remote-sync-config: true
#注册中心
discovery:
enabled: true
server-addr: nacos-cluster-service.nacos-cluster:8848
group: zq-release
namespace: daop-lt
metadata:
code: "004"
user:
name: nacos
password: nacos
management:
context-path: /actuator
#接口限流
sentinel:
transport:
# port: 7777
dashboard: sentinel-service.nacos-cluster:8858
#取消懒加载
eager: true
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: '*'
###暂时禁用rabbit的健康检查
health:
rabbit:
enabled: false
sentinel:
enabled: false
feign:
sentinel:
enabled: true
\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!