89666749 by 郭燕华

Merge remote-tracking branch 'origin/develop' into develop

2 parents 40d7db6c 137854e9
Showing 35 changed files with 1321 additions and 280 deletions
......@@ -89,6 +89,14 @@ public class DemandController {
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 = "数据需求审批-最后一个节点时调用")
......@@ -97,6 +105,13 @@ public class DemandController {
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
}
......
......@@ -3,6 +3,7 @@ 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;
......@@ -70,6 +71,14 @@ public class EnterpriseController {
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 = "企业信息-详情",
......@@ -79,6 +88,15 @@ public class EnterpriseController {
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 = "按名称查企业信息详情",
......@@ -96,12 +114,12 @@ public class EnterpriseController {
return CommonRes.success(true);
}
@PostMapping("/last-approve")
@SystemLog(value = "企业认证审批")
@Operation(summary = "企业认证审批-最后一个节点时调用")
public CommonRes<Boolean> lastApprove(@RequestBody FlowUpdateStateDTO dto) {
Boolean vo = enterpriseService.lastApprove(dto);
return CommonRes.success(vo);
@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")
......@@ -135,6 +153,14 @@ public class EnterpriseController {
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 = "变更申请-保存数据")
......@@ -151,6 +177,22 @@ public class EnterpriseController {
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.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;
}
......@@ -55,4 +55,7 @@ public class ChangeApproveVO {
@Schema(description = "原业务数据明细")
private String oldBizDataDetailJson;
private String zqName;
private String zqBizGuid;
}
\ No newline at end of file
......
......@@ -3,6 +3,7 @@ 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;
......@@ -29,6 +30,9 @@ public class DemandRQVO extends FlowRQBaseVO {
@Schema(description = "需求类型")
private String requirementType;
@Schema(title = "专区名称")
private String zqName;
/**
* 需求分类【1新增 2调整】
*/
......@@ -206,6 +210,18 @@ public class DemandRQVO extends FlowRQBaseVO {
/******** 自定义扩展 *****/
@Schema(description = "合同附件")
private String contractAttachJson;
@Schema(description = "加工单位类型")
private String processCompanyType;
@Schema(description = "加工单位唯一标识")
private String processCompanyGuid;
@Schema(description = "加工单位名称")
private String processCompanyName;
/******** 子对象 *****/
}
......
......@@ -168,7 +168,7 @@ public class DemandRSVO {
* 加工单生成时间
*/
@Schema(description = "加工单生成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date processingGenerateTime;
/**
......@@ -218,7 +218,7 @@ public class DemandRSVO {
private String processCompanyGuid;
@Schema(description = "加工单位名称")
private String productAcceptName;
private String processCompanyName;
@Schema(description = "发起人")
private String createUserName;
......@@ -232,6 +232,18 @@ public class DemandRSVO {
@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;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
......
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;
/**
......@@ -32,5 +35,11 @@ public class DemandUpdateStateVO {
@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;
/******** 子对象 *****/
}
......@@ -17,12 +17,17 @@ import java.util.Date;
@Schema(title = "企业信息新增、修改参数")
public class EnterpriseRQVO extends FlowRQBaseVO {
@Schema(description = "会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String tenantName;
@Schema(title = "专区名称")
private String zqName;
/**
* 统一社会信用代码
*/
......
......@@ -24,6 +24,9 @@ public class EnterpriseRSVO {
@Schema(description = "系统唯一标识")
private String guid;
@Schema(description = "会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
......@@ -186,6 +189,15 @@ public class EnterpriseRSVO {
@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;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
......
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 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;
/********非库表存储属性*****/
/********字典类*****/
/********实体类、用户单选、组织机构单选*****/
/********范围查询*****/
/********自定义扩展*****/
/********子对象*****/
}
......@@ -154,6 +154,9 @@ public class TenantRQVO extends CsbrBaseVO {
@Schema(description = "token后台赋值")
private String token;
@Schema(description = "业务唯一标识")
private String bizGuid;
/********字典类*****/
/********实体类、用户单选、组织机构单选*****/
......@@ -164,6 +167,9 @@ public class TenantRQVO extends CsbrBaseVO {
/********子对象*****/
@Schema(description = "企业证照列表")
private List<TenantLicRQVO> tenantLicList;
@Schema(hidden = true,description = "分库标识")
private String shardingFlag;
}
......
......@@ -4,6 +4,7 @@ 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;
......@@ -43,5 +44,8 @@ public interface ConfigureFeign {
@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();
}
......
......@@ -3,6 +3,7 @@ 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;
......@@ -18,10 +19,13 @@ import java.util.Map;
@FeignClient(value = "ms-data-process-basic-service",url = "${dataProcessUrl}", configuration = FastCallFeignConfiguration.class)
public interface DataProcessBasicFeign {
@PostMapping(value = "/process-order/save", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@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);
}
......
......@@ -21,7 +21,10 @@ public interface PersonelFeign {
CommonRes<TenantRQVO> authTenant(@RequestBody TenantRQVO vo);
@PutMapping(value = "/tenant/update", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
CommonRes<Boolean> updateTenant(@RequestBody TenantRQVO vo);
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();
......
......@@ -2,10 +2,9 @@ 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.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.UserQueryDTO;
import com.csbr.qingcloud.portal.domain.vo.UserVO;
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;
......@@ -13,10 +12,10 @@ 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.*;
import java.net.URI;
import java.util.List;
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
......@@ -30,5 +29,9 @@ public interface WorkflowFeign {
@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);
}
......
......@@ -221,4 +221,13 @@ public class MfDemand extends BaseShardingDO {
@Name("加工单编号")
private String processOrderNo;
@Name("资产Guid")
private String zqBizGuid;
@Name("专区名称")
private String zqName;
@Name("审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
}
......
......@@ -22,6 +22,9 @@ import java.util.Date;
@Name("企业信息")
public class MfEnterprise extends BaseDO {
@Name("会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
......@@ -37,7 +40,7 @@ public class MfEnterprise extends BaseDO {
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Name("企业类型【选择平台字典【公司类型】的选项】")
@Name("企业类型")
private String tenantType;
/**
......@@ -49,7 +52,7 @@ public class MfEnterprise extends BaseDO {
/**
* 注册资本【(万元)】
*/
@Name("注册资本【(万元)】")
@Name("注册资本")
private BigDecimal registeredCapital;
/**
......@@ -79,7 +82,7 @@ public class MfEnterprise extends BaseDO {
/**
* 营业期限【1 长期有效;2 自定义】
*/
@Name("营业期限【1 长期有效;2 自定义】")
@Name("营业期限")
private String businessLicenseTerm;
/**
......@@ -102,9 +105,9 @@ public class MfEnterprise extends BaseDO {
private String businessLicenseJson;
/**
* 营业执照经营范围
* 经营范围
*/
@Name("营业执照经营范围")
@Name("经营范围")
private String businessLicenseScope;
/**
......@@ -169,10 +172,19 @@ public class MfEnterprise extends BaseDO {
@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("业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃;B 变更中 默认 N】")
@Name("业务审批状态")
private String bizApproveState;
}
......
......@@ -22,6 +22,9 @@ import java.util.Date;
@Name("企业信息变更审批")
public class MfEnterpriseChangeApprove extends BaseDO {
@Name("会员GUID")
private String tenantGuid;
/**
* 公司名称
*/
......@@ -37,7 +40,7 @@ public class MfEnterpriseChangeApprove extends BaseDO {
/**
* 企业类型【选择平台字典【公司类型】的选项】
*/
@Name("企业类型【选择平台字典【公司类型】的选项】")
@Name("企业类型")
private String tenantType;
/**
......@@ -49,7 +52,7 @@ public class MfEnterpriseChangeApprove extends BaseDO {
/**
* 注册资本【(万元)】
*/
@Name("注册资本【(万元)】")
@Name("注册资本")
private BigDecimal registeredCapital;
/**
......@@ -79,7 +82,7 @@ public class MfEnterpriseChangeApprove extends BaseDO {
/**
* 营业期限【1 长期有效;2 自定义】
*/
@Name("营业期限【1 长期有效;2 自定义】")
@Name("营业期限")
private String businessLicenseTerm;
/**
......@@ -172,7 +175,7 @@ public class MfEnterpriseChangeApprove extends BaseDO {
/**
* 业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】
*/
@Name("业务审批状态【N 草稿中,A 审批中,Y 已通过,R 驳回,C 已撤销,D 已废弃; 默认 N】")
@Name("业务审批状态")
private String bizApproveState;
/**
......@@ -187,10 +190,19 @@ public class MfEnterpriseChangeApprove extends BaseDO {
@Name("原数据唯一标识")
private String sourceGuid;
@Name("资产Guid")
private String zqBizGuid;
@Name("专区名称")
private String zqName;
@Name("审批状态(N 初始 A 审批中 Y 已通过 R 驳回 C 已撤销)")
private String crossPlatformApproveState;
/**
* 数据类型【数据类型 1原数据 2新数据】
*/
@Name("数据类型【数据类型 1原数据 2新数据】")
@Name("数据类型")
private String dataType;
}
......
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;
......@@ -7,6 +9,10 @@ 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: 企业信息逻辑层接口实现
......@@ -19,4 +25,11 @@ public class MfEnterpriseServiceImpl extends CsbrServiceImpl<MfEnterpriseMapper,
@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.service;
import com.csbr.qingcloud.portal.domain.vo.DemandApproveVO;
import com.csbr.qingcloud.portal.domain.vo.DemandUpdateStateVO;
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 com.csbr.qingcloud.portal.domain.vo.DemandQueryVO;
import com.csbr.qingcloud.portal.domain.vo.DemandRSVO;
import java.util.List;
......@@ -72,8 +69,19 @@ public interface DemandService {
*/
void flowCallBack(BizCallbackDTO dto);
/**
* 数据需求-流程结束后进行业务回调(跨服务审批)
* @param dto
*/
void crossFlowCallBack(BizCallbackDTO dto);
Boolean lastApprove(DemandApproveVO dto);
DemandRSVO getDemandDetailByProcess(String processOrderNo);
/**
* 根据加工单编号查询资产列表
* @return
*/
List<ProcessOrderProcessDtlRSVO> listByProcessOrderNo();
}
......
......@@ -16,4 +16,10 @@ public interface EnterpriseChangeApproveService {
ChangeApproveVO changeDetail(String guid);
void changeUpdate(BizCallbackDTO dto);
void removeByGuids(List<String> guids);
void crossFlowCallBack(BizCallbackDTO dto);
void crossRemoveByBizGuid(List<String> zqBizGuids);
}
......
package com.csbr.qingcloud.portal.service;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
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;
/**
......@@ -26,6 +28,13 @@ public interface EnterpriseService {
PageListVO<EnterpriseRSVO> pageList(EnterpriseQueryVO queryVO);
/**
* 企业信息-分页(调用流程)
* @param dto
* @return
*/
PageListVO<EnterpriseApproveRSVO> flowPageList(FlowQueryDTO dto);
/**
* 企业信息获取详情数据
* @author xcq
* @date 2024-12-26 16:18
......@@ -70,14 +79,28 @@ public interface EnterpriseService {
*/
void flowCallBack(BizCallbackDTO dto);
/**
* 流程结束后进行业务回调(跨服务审批)
* @param dto
*/
void crossFlowCallBack(BizCallbackDTO dto);
Boolean check(EnterpriseRQVO vo);
List<ChangeInfoVO> getChange(String tenantName);
List<ChangeInfoVO> getChange(String sourceGuid, Date createTime);
EnterpriseRSVO getEnterpriseDetailByName(String tenantName);
/** 将此账号提交的数据需求迁移到新的企业 */
void moveOldData(TenantRQVO vo);
Boolean lastApprove(FlowUpdateStateDTO dto);
/** 更新会员信息 */
void updateTenant(MfEnterprise vo);
/**
* 企业信息-根据登陆账号查询详情
* @param logonUser
* @return
*/
EnterpriseRSVO getEnterpriseDetailByLogonUser(String logonUser);
}
......
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.workflow.domain.dto.appove.FlowUpdateStateDTO;
......@@ -13,6 +13,9 @@ 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;
......@@ -32,11 +35,13 @@ 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;
......@@ -55,11 +60,19 @@ 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();
@Autowired
private ZQConfig zqConfig;
@Autowired
private InvokeUtil invokeUtil;
@Resource
private MfDemandService mfDemandService;
......@@ -136,8 +149,13 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
if(CollectionUtils.isEmpty(guids)){
return null;
}
try{
Map<String, DemandUpdateStateVO> map = dataProcessBasicFeign.getOrderState(guids).getData();
return map;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
......@@ -151,11 +169,13 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
@Override
public void saveDemand(FlowRQBaseVO flowBaseVO) {
DemandRQVO rqVO = (DemandRQVO) flowBaseVO;
log.info("======rqVO, {}", JSON.toJSONString(rqVO));
System.out.println("======rqVO, " + JSON.toJSONString(rqVO));
beforeSave(rqVO);
MfDemand entity = convertToEntity(rqVO);
entity.setRequirementOrderNo(configureFeign.newCode(new RuleDTO().setRuleName("demand-code").setRuleType("generate")).getData());
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startWorkFlow(rqVO, approvalDTO, entity::setBizApproveState);
// 业务数据保存
boolean flag = mfDemandService.save(entity);
......@@ -166,6 +186,20 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
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
......@@ -183,7 +217,7 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
beforeUpdate(rqVO);
MfDemand entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startOrRestartWorkFlow(rqVO, rqVO.getBizApproveState(), approvalDTO, entity::setBizApproveState);
if (rqVO.getIsRestart()) {
// 重新提交
......@@ -209,9 +243,9 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
* @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) {
......@@ -219,6 +253,7 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
}
// 发起新的流程
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);
}
......@@ -238,6 +273,7 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
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);
beforeRemove(entity);
......@@ -246,9 +282,19 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
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());
}
}
/**
......@@ -265,6 +311,29 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(FUNCTION_NAME));
}
String orderNo = null;
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState()) && !dto.getIsZqPlatformApprove() && StringUtils.isEmpty(entity.getZqName())) {
//生成加工单
orderNo = addOrder(mfDemandService.getById(dto.getBizGuid()),dto);
}
// 同步更新审批状态
LambdaUpdateWrapper<MfDemand> updateWrapper = new LambdaUpdateWrapper<>();
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;
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState())) {
//生成加工单
orderNo = addOrder(mfDemandService.getById(dto.getBizGuid()),dto);
......@@ -272,6 +341,7 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
// 同步更新审批状态
LambdaUpdateWrapper<MfDemand> updateWrapper = new LambdaUpdateWrapper<>();
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());
......@@ -323,6 +393,12 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
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();
......@@ -340,25 +416,45 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
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();
}
/**
* 获取发起流程参数
* @author xcq
* @date 2024-12-31 18:46
*
* @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) {
private AddApprovalDTO getAddApprovalDTO(MfDemand entity, DemandRQVO rqVO) {
AddApprovalDTO approvalDTO = new AddApprovalDTO(FLOW_TYPE, entity.getGuid());
// todo
approvalDTO.setFuncCode("SJXQ");
approvalDTO.setFuncCode(SysFuncCode);
approvalDTO.setUrlParam(String.format("guid=%s&demandCategory=%s&name=%s&type=detail", entity.getGuid(), entity.getDemandCategory(), entity.getDataDemandName()));
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(null);
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;
}
......@@ -378,6 +474,9 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
if(rqVO.getImmediateApprove() && "2".equals(rqVO.getDemandCategory())){
checkProductGuid(rqVO.getDataProductGuid());
}
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
......@@ -449,13 +548,15 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
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());
//region 3.数据转换处理
//region 3.1.数据过程转换
rqVO.setBizApproveState(entity.getBizApproveState());
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
......@@ -549,7 +650,6 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
private StaffRSVO getCurStaff(){
UserInfo userInfo = UserContextHolder.get();
userInfo.getUserId();
StaffRSVO staffVO = personelFeign.getByUserGuid(userInfo.getUserId()).getData();
return staffVO;
}
......@@ -596,11 +696,16 @@ public class DemandServiceImpl extends FlowAbstractImpl implements DemandService
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
......
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.EnterpriseRQVO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO;
import com.csbr.qingcloud.portal.domain.vo.TenantRQVO;
import com.csbr.qingcloud.portal.feign.PersonelFeign;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
......@@ -19,14 +22,21 @@ import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveServic
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.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.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* @program: ms-hc-customer-service
......@@ -38,6 +48,19 @@ import java.util.Map;
@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;
......@@ -51,11 +74,18 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
private EnterpriseService enterpriseService;
@Resource
private MessageSourceUtil messageSourceUtil;
@Resource
private ApprovalFlowUtil approvalFlowUtil;
@Resource
private PersonelFeign personelFeign;
/** 保存变更数据 */
@Override
public void changeSave(ChangeApproveVO vo) {
log.info("======vo, {}", JSON.toJSONString(vo));
//对重新发起的原审批源数据进行废弃
if(StringUtils.isNotBlank(vo.getSourceApproveGuid())){
LambdaUpdateWrapper<MfEnterpriseChangeApprove> updateWrapper = new LambdaUpdateWrapper<>();
......@@ -66,9 +96,11 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
//保存新数据
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);
......@@ -78,8 +110,10 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
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);
......@@ -88,6 +122,8 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
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());
}
/** 变更数据详细接口 */
......@@ -124,6 +160,12 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
@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.PASSED.getValue())){
MfEnterprise bean = mfEnterpriseService.getById(entity.getSourceGuid());
......@@ -131,31 +173,120 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
mfEnterpriseService.updateById(bean);
return;
}
if (!dto.getIsZqPlatformApprove()) {
//审批通过则执行更新
EnterpriseRQVO vo = csbrBeanUtil.convert(entity,EnterpriseRQVO.class);
MfEnterprise vo = csbrBeanUtil.convert(entity,MfEnterprise.class);
vo.setGuid(entity.getSourceGuid());
vo.setBizApproveState("Y");
mfEnterpriseService.updateById(vo);
LambdaUpdateWrapper<MfEnterprise> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(MfEnterprise::getGuid, entity.getSourceGuid());
wrapper.set(MfEnterprise::getBizApproveState, "Y");
mfEnterpriseService.update(wrapper);
//同步更新会员表
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);
beforeRemove(entity);
boolean flag = mfEnterpriseChangeApproveService.removeById(guid);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
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.PASSED.getValue())){
MfEnterprise bean = mfEnterpriseService.getById(entity.getSourceGuid());
bean.setBizApproveState("Y");
bean.setCrossPlatformApproveState("Y");
mfEnterpriseService.updateById(bean);
return;
}
//审批通过则执行更新
MfEnterprise vo = csbrBeanUtil.convert(entity,MfEnterprise.class);
vo.setGuid(entity.getSourceGuid());
vo.setBizApproveState("Y");
vo.setCrossPlatformApproveState("Y");
mfEnterpriseService.updateById(vo);
//同步更新会员表
TenantRQVO tenantVO = csbrBeanUtil.convert(vo,TenantRQVO.class);
tenantVO.setGuid(getTenantGuid(vo.getTenantName()));
tenantVO.setPersonIncharge(vo.getJuridicalPerson());
personelFeign.updateTenant(tenantVO);
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()));
}
private String getTenantGuid(String name){
Map<String,String> map = personelFeign.getAllTenantGuidNameMap().getData();
for(String guid : map.keySet()){
if(map.get(guid).equals(name)){
return guid;
/**
* 企业信息删除前置处理
* @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, "审批中和审批通过的数据不能删除!");
}
return null;
}
/** 转换数据 */
......
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.UserError;
import com.csbr.cloud.common.enums.WorkFlowBizEnum;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.exception.CsbrUserException;
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.mq.service.KafkaStdService;
import com.csbr.cloud.distributelock.util.RedisUtil;
import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
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.qingcloud.portal.feign.WorkflowFeign;
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.UserFeign;
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;
......@@ -29,30 +31,25 @@ 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.ObjectUtil;
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.common.util.DateUtil;
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.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @program: D:/git/ms-data-circulation-portal-service
......@@ -69,6 +66,14 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
*/
private static final String FUNCTION_NAME = "企业信息";
private static final String SysFuncCode = "QYRZ";
@Autowired
private ZQConfig zqConfig;
@Autowired
private InvokeUtil invokeUtil;
@Resource
private MfEnterpriseService mfEnterpriseService;
......@@ -85,19 +90,19 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
private PersonelFeign personelFeign;
@Resource
private MfEnterpriseChangeApproveService mfEnterpriseChangeApproveService;
private WorkflowFeign workflowFeign;
@Resource
private MfDemandService mfDemandService;
private RedisUtil redisUtil;
@Resource
private UserFeign userFeign;
private MfEnterpriseChangeApproveService mfEnterpriseChangeApproveService;
@Resource
private WorkflowFeign workflowFeign;
private MfDemandService mfDemandService;
@Autowired(required = false)
private KafkaStdService kafkaStdService;
@Resource
private ConfigureFeign configureFeign;
/**
* 企业信息分页查询
......@@ -122,6 +127,54 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
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(mfEnterpriseMap) && mfEnterpriseMap.containsKey(enterpriseApproveRSVO.getBizGuid())) {
MfEnterprise mfEnterprise = mfEnterpriseMap.get(enterpriseApproveRSVO.getBizGuid());
enterpriseApproveRSVO.setCrossPlatformApproveState(mfEnterprise.getCrossPlatformApproveState());
enterpriseApproveRSVO.setZqName(mfEnterprise.getZqName());
enterpriseApproveRSVO.setTenantName(mfEnterprise.getTenantName());
}
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());
}
results.add(enterpriseApproveRSVO);
}
rsPageList.setRecords(results);
}
return rsPageList;
}
/**
* 企业信息获取详情数据
* @author xcq
......@@ -142,23 +195,29 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
}
EnterpriseRSVO vo = convertToVO(entity);
//生成变更信息
vo.setChangeList(getChange(entity.getTenantName()));
vo.setChangeList(getChange(guid, entity.getCreateTime()));
return vo;
}
/** 生成变更信息列表 */
@Override
public List<ChangeInfoVO> getChange(String tenantName){
public List<ChangeInfoVO> getChange(String sourceGuid, Date createTime){
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterpriseChangeApprove::getTenantName,tenantName);
queryWrapper.eq(MfEnterpriseChangeApprove::getSourceGuid, sourceGuid);
queryWrapper.eq(MfEnterpriseChangeApprove::getBizApproveState, ApprovalStateEnum.PASSED.getValue());
queryWrapper.le(MfEnterpriseChangeApprove::getCreateTime, createTime);
queryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime);
queryWrapper.last(" limit 2 ");
List<MfEnterpriseChangeApprove> approveList = mfEnterpriseChangeApproveService.list(queryWrapper);
if(CollectionUtils.isEmpty(approveList)){
return new ArrayList<>();
}
List<ChangeApproveBean> beanList = getChangeBeanList(approveList);
try {
return getChangeList(beanList);
if(CollectionUtils.isEmpty(ChangeInfoUtil.areaList)){
ChangeInfoUtil.areaList = configureFeign.getBoroughCodeName().getData();
}
return ChangeInfoUtil.getChangeList(beanList);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
......@@ -176,32 +235,6 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
return convertToVO(list.get(0));
}
public static void test(){
List<ChangeApproveBean> beanList = new ArrayList<>();
ChangeApproveBean bean = new ChangeApproveBean();
MfEnterprise oldBean = new MfEnterprise();
oldBean.setBankTaxNo("999");
oldBean.setTenantName("武汉小米");
oldBean.setCreateTime(new Date());
MfEnterprise newBean = new MfEnterprise();
newBean.setBankTaxNo("666");
newBean.setTenantName("武汉大米");
newBean.setCreateTime(new Date());
bean.oldBean = oldBean;
bean.newBean = newBean;
beanList.add(bean);
List<ChangeInfoVO> list = new ArrayList<>();
try {
list = getChangeList(beanList);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
log.info("变更内容:{}", JSON.toJSONString(list));
}
/** 准备变更对比实体 */
private List<ChangeApproveBean> getChangeBeanList(List<MfEnterpriseChangeApprove> list){
List<ChangeApproveBean> beanList = new ArrayList<>();
......@@ -224,79 +257,6 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
public MfEnterprise newBean;
}
/** 计算变更信息 */
public static List<ChangeInfoVO> getChangeList(List<ChangeApproveBean> beanList) throws IllegalAccessException {
List<ChangeInfoVO> list = new ArrayList<>();
//循环对比每组记录生来变更内容
for(ChangeApproveBean item : beanList){
List<CompareResult> diffList = ObjectUtil.getBeanDiff(item.oldBean,item.newBean);
getVenueResult(item,diffList);
getStartEndResult(item,diffList);
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("营业结束日期")){
continue;
}
ChangeInfoVO vo = new ChangeInfoVO();
vo.setNameEn(diffItem.getFieldName());
vo.setName(diffItem.getFieldComment());
vo.setDate(DateUtil.formatDate(item.oldBean.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
vo.setBefore(diffItem.getOldValue().toString());
vo.setAfter(diffItem.getNewValue().toString());
vo.setGuid(CommonUtil.newGuid());
list.add(vo);
}
}
return list;
}
private static void getVenueResult(ChangeApproveBean item, List<CompareResult> diffList) {
String oldVenue = getVenue(item.oldBean.getProvince(),item.oldBean.getCity(),item.oldBean.getDistrict());
String newVenue = getVenue(item.newBean.getProvince(),item.newBean.getCity(),item.newBean.getDistrict());
if(!oldVenue.equals(newVenue)){
CompareResult result = new CompareResult();
result.setFieldComment("注册地");
result.setFieldName("venue");
result.setOldValue(oldVenue);
result.setNewValue(newVenue);
diffList.add(result);
}
}
private static void getStartEndResult(ChangeApproveBean item, List<CompareResult> diffList) {
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)){
CompareResult result = new CompareResult();
result.setFieldComment("营业日期范围");
result.setFieldName("businessLicenseStartEnd");
result.setOldValue(oldValue);
result.setNewValue(newValue);
diffList.add(result);
}
}
private static String getVenue(String province, String city, String district) {
if(StringUtils.isBlank(district)){
return String.format("%s/%s",province,city);
}
else{
return String.format("%s/%s/%s",province,city,district);
}
}
private static String getStartEnd(String businessLicenseTerm,Date businessLicenseStartDate, Date businessLicenseEndDate) {
if("1".equals(businessLicenseTerm)){
return "长期有效";
}
return String.format("%s至%s",businessLicenseStartDate,businessLicenseEndDate);
}
/**
* 企业信息数据新增
* @author xcq
......@@ -312,7 +272,7 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
beforeSave(rqVO);
MfEnterprise entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startWorkFlow(rqVO, approvalDTO, entity::setBizApproveState);
// 业务数据保存
boolean flag = mfEnterpriseService.save(entity);
......@@ -339,7 +299,7 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
beforeUpdate(rqVO);
MfEnterprise entity = convertToEntity(rqVO);
// 发起审批流程或保存草稿
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity);
AddApprovalDTO approvalDTO = getAddApprovalDTO(entity, rqVO);
super.startOrRestartWorkFlow(rqVO, rqVO.getBizApproveState(), approvalDTO, entity::setBizApproveState);
if (rqVO.getIsRestart()) {
// 重新提交
......@@ -365,9 +325,9 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
* @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) {
......@@ -375,6 +335,8 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
}
// 发起新的流程
approvalDTO.setBizGuid(entity.getGuid());
approvalDTO.setUrlParam(String.format("guid=%s&name=%s&tName=%s&fType=%s&bizGuid=%s&type=detail",entity.getGuid(), entity.getTenantName(),
entity.getTenantName(),WorkFlowBizEnum.ENTERPRISE_APPLY.getValue(),entity.getGuid()));
approvalFlowUtil.addApproval(approvalDTO);
afterSave(entity, rqVO);
}
......@@ -394,6 +356,7 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
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);
beforeRemove(entity);
......@@ -402,53 +365,20 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
afterRemove(entity);
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
crossPlatformApproveState = entity.getCrossPlatformApproveState();
}
/** ***企业认证*** */
@GlobalTransactional
@Override
public Boolean lastApprove(FlowUpdateStateDTO dto) {
//如果是非认证会员认证审批通过了 则需要走kafka生成新会员
dto.setBackEndInvoke(true);
KafkaApproveDTO approveDTO = new KafkaApproveDTO();
approveDTO.setHeader(getHeader());
approveDTO.setUpdateStateDTO(dto);
kafkaStdService.stdSendMsgWithPrefix("tenant.enterprise", JSON.toJSONString(approveDTO));
return true;
}
private MultiValueMap<String, String> getHeader(){
ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
Enumeration<String> headerNames = servletRequestAttributes.getRequest().getHeaderNames();
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
List<String> names = List.of("AUTHORIZATION", "X-USERINFO", "TENANT", "TOKEN");
while (null != headerNames && headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String value = servletRequestAttributes.getRequest().getHeader(name);
if (names.contains(name.toUpperCase())) {
headers.put(name, List.of(value));
}
}
return headers;
// 删除主平台数据
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());
}
@KafkaListener(containerFactory = "kafkaListenerContainerFactory", groupId = "scm.notify", topics = "${csbr.kafka.topic-prefix:}_"+"tenant.enterprise",
errorHandler = "consumerAwareErrorHandler")
public void addUserListener(List<ConsumerRecord<String, String>> records, Acknowledgment ack) {
ack.acknowledge();
for (ConsumerRecord<String, String> record : records) {
try {
KafkaApproveDTO approveDTO = JSON.parseObject(record.value(),KafkaApproveDTO.class);
workflowFeign.allowFlowCore(approveDTO.getUpdateStateDTO(),approveDTO.getHeader()).getData();
} catch (Exception e) {
log.error("企业认证出现异常: " + e.getMessage() + ";\nRecord Info: " + record.toString());
e.printStackTrace();
return;
}
}
// 删除流程数据
approvalFlowUtil.removeApproveByBizGuids(guids);
}
/**
......@@ -473,23 +403,98 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(String.format("%s的业务审批状态", FUNCTION_NAME)));
}
if (ApprovalStateEnum.PASSED.getValue().equals(dto.getApprovalState())) {
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.setGuid(CommonUtil.newGuid());
vo.setContactTel(entity.getContactTel());
vo.setBizGuid(dto.getBizGuid());
vo.setPersonIncharge(entity.getJuridicalPerson());
vo.setBizState("Y");
try{
vo = personelFeign.authTenant(vo).getData();
}catch (Exception e){
if(!e.getMessage().contains("Read timed out")){
throw e;
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;
}
/** 将此账号提交的数据需求迁移到新的企业 */
......@@ -519,53 +524,126 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
mfDemandService.removeByIds(list);
}
/** 仅更新会员本表信息 */
@Override
public Boolean check(EnterpriseRQVO vo) {
//防止管理员帐号发起认证
if(StringUtils.isBlank(vo.getGuid())){
checkUser(vo.getLogonUser());
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);
}
//检查会员名称等数据
TenantRQVO tenant = csbrBeanUtil.convert(vo,TenantRQVO.class);
personelFeign.checkTenant(tenant);
return true;
@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())).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;
}
private void checkUser(String logonUser){
UserQueryDTO dto = new UserQueryDTO();
dto.setLogonUser(logonUser);
List<UserVO> userList = userFeign.getUserSomeInfo(dto).getData().getRecords();
if(CollectionUtils.isNotEmpty(userList)){
StaffRSVO staffVO = personelFeign.getByUserGuid(userList.get(0).getGuid()).getData();
if(staffVO != null && StringUtils.isNotBlank(staffVO.getIsAdmin()) && "Y".equals(staffVO.getIsAdmin())){
throw new CsbrUserException(UserError.VALIDATE_CODE_ERROR, "账号已存在!");
@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;
}
/**
* 获取发起流程参数
* @author xcq
* @date 2024-12-26 16:18
*
* @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) {
private AddApprovalDTO getAddApprovalDTO(MfEnterprise entity, EnterpriseRQVO rqVO) {
AddApprovalDTO approvalDTO = new AddApprovalDTO(WorkFlowBizEnum.ENTERPRISE_APPLY.getValue(), entity.getGuid());
// todo
approvalDTO.setFuncCode("QYRZ");
approvalDTO.setFuncCode(SysFuncCode);
approvalDTO.setUrlParam(String.format("guid=%s&name=%s&tName=%s&fType=%s&bizGuid=%s&type=detail", entity.getGuid(), entity.getTenantName(),
entity.getTenantName(), WorkFlowBizEnum.ENTERPRISE_APPLY.getValue(), entity.getGuid()));
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(null);
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
......@@ -657,11 +735,11 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
rqVO.setBizApproveState(entity.getBizApproveState());
//region 3.数据转换处理
//region 3.1.数据过程转换
rqVO.setBizApproveState(entity.getBizApproveState());
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
......@@ -803,8 +881,11 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
EnterpriseRSVO vo = csbrBeanUtil.convert(entity, EnterpriseRSVO.class);
//流程数据处理
vo.setApproveVO(approvalFlowUtil.getApprovalCrossTenantInfo(entity.getGuid()));
vo.setVenue(getVenue(vo.getProvince(),vo.getCity(),vo.getDistrict()));
vo.setBusinessLicenseStartEnd(getStartEnd(vo.getBusinessLicenseTerm(),vo.getBusinessLicenseStartDate(),vo.getBusinessLicenseEndDate()));
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;
}
......
......@@ -202,9 +202,9 @@ public class ServicerMaintainServiceImpl extends FlowAbstractImpl implements Ser
* @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) {
......@@ -284,7 +284,7 @@ public class ServicerMaintainServiceImpl extends FlowAbstractImpl implements Ser
// todo
approvalDTO.setFuncCode("FWSWH");
// 流程消息中的变量替换参数
approvalDTO.setFlowMessageBody(null);
approvalDTO.setFlowMessageBody(String.format("%s,%s",entity.getCreateUserName(),entity.getTenantName()));
// 流程列表数据核心param参数处理
approvalDTO.setParam1(null);
approvalDTO.setParam2(null);
......@@ -388,7 +388,6 @@ public class ServicerMaintainServiceImpl extends FlowAbstractImpl implements Ser
//region 3.数据转换处理
//region 3.1.数据过程转换
rqVO.setBizApproveState(entity.getBizApproveState());
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
......
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("注册资本")){
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
......@@ -58,8 +58,8 @@ public class ObjectUtil {
r.setFieldComment("");
}
if (oldField.getType() == Date.class) {
r.setOldValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) oldField.get(oldObj)));
r.setNewValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) newField.get(newObj)));
r.setOldValue(DateUtil.getDateToString((Date)oldField.get(oldObj)));
r.setNewValue(DateUtil.getDateToString((Date)oldField.get(newObj)));
}
return r;
}
......
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 Boolean isMain = false;
}
\ 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: 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:
......
......@@ -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:
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!