ad94ff99 by 肖初晴

【DAOP-1.0】企业认证

【功能点】变更功能开发
1 parent 6fa656c9
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import csbr.cloud.entity.domain.base.vo.CsbrBaseVO;
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data;
6 import lombok.EqualsAndHashCode;
7 import lombok.experimental.Accessors;
8
9 import java.math.BigDecimal;
10 import java.time.LocalDateTime;
11
12 /**
13 * 变更信息视图对象类
14 *
15 * @author xiaocq
16 * @date 2024-12-30
17 */
18 @Data
19 public class ChangeInfoVO extends CsbrBaseVO {
20
21 @Schema(description = "名称")
22 private String name;
23
24 @Schema(description = "日期")
25 private String date;
26
27 @Schema(description = "变更前")
28 private String before;
29
30 @Schema(description = "变更后")
31 private String after;
32
33 }
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import lombok.Data;
4
5 /** 对比对象 */
6 @Data
7 public class CompareResult {
8 /** 字段名 */
9 private String fieldName;
10 /** 旧值 */
11 private Object oldValue;
12 /** 新值 */
13 private Object newValue;
14 /** 字段中文名 */
15 private String fieldComment;
16 }
...@@ -6,6 +6,7 @@ import lombok.Data; ...@@ -6,6 +6,7 @@ import lombok.Data;
6 import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO; 6 import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO;
7 import java.math.BigDecimal; 7 import java.math.BigDecimal;
8 import java.util.Date; 8 import java.util.Date;
9 import java.util.List;
9 10
10 /** 11 /**
11 * @program: D:/git/ms-data-circulation-portal-service 12 * @program: D:/git/ms-data-circulation-portal-service
...@@ -185,6 +186,9 @@ public class EnterpriseRSVO { ...@@ -185,6 +186,9 @@ public class EnterpriseRSVO {
185 */ 186 */
186 @Schema(description = "审批信息") 187 @Schema(description = "审批信息")
187 private BizApproveVO approveVO; 188 private BizApproveVO approveVO;
189
190 @Schema(description = "变更信息列表")
191 private List<ChangeInfoVO> changeList;
188 192
189 /******** 子对象 *****/ 193 /******** 子对象 *****/
190 194
......
...@@ -2,6 +2,8 @@ package com.csbr.qingcloud.portal.service; ...@@ -2,6 +2,8 @@ package com.csbr.qingcloud.portal.service;
2 2
3 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO; 3 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
4 import com.csbr.qingcloud.portal.domain.vo.ChangeApproveVO; 4 import com.csbr.qingcloud.portal.domain.vo.ChangeApproveVO;
5 import com.csbr.qingcloud.portal.domain.vo.ChangeInfoVO;
6 import java.util.List;
5 7
6 /** 8 /**
7 * @description: 供应商商品变更 9 * @description: 供应商商品变更
...@@ -14,4 +16,6 @@ public interface EnterpriseChangeApproveService { ...@@ -14,4 +16,6 @@ public interface EnterpriseChangeApproveService {
14 ChangeApproveVO changeDetail(String guid); 16 ChangeApproveVO changeDetail(String guid);
15 17
16 void changeUpdate(BizCallbackDTO dto); 18 void changeUpdate(BizCallbackDTO dto);
19
20 List<ChangeInfoVO> getChange(String tenantName);
17 } 21 }
......
...@@ -8,10 +8,7 @@ import com.csbr.cloud.common.exception.CsbrSystemException; ...@@ -8,10 +8,7 @@ import com.csbr.cloud.common.exception.CsbrSystemException;
8 import com.csbr.cloud.common.util.CommonUtil; 8 import com.csbr.cloud.common.util.CommonUtil;
9 import com.csbr.cloud.common.util.CsbrBeanUtil; 9 import com.csbr.cloud.common.util.CsbrBeanUtil;
10 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO; 10 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
11 import com.csbr.qingcloud.portal.domain.vo.ChangeApproveVO; 11 import com.csbr.qingcloud.portal.domain.vo.*;
12 import com.csbr.qingcloud.portal.domain.vo.EnterpriseRQVO;
13 import com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO;
14 import com.csbr.qingcloud.portal.domain.vo.TenantRQVO;
15 import com.csbr.qingcloud.portal.feign.PersonelFeign; 12 import com.csbr.qingcloud.portal.feign.PersonelFeign;
16 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise; 13 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
17 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove; 14 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
...@@ -19,11 +16,16 @@ import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveServic ...@@ -19,11 +16,16 @@ import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveServic
19 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService; 16 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
20 import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService; 17 import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService;
21 import com.csbr.qingcloud.portal.service.EnterpriseService; 18 import com.csbr.qingcloud.portal.service.EnterpriseService;
19 import com.csbr.qingcloud.portal.util.ObjectUtil;
22 import csbr.cloud.entity.enums.ApprovalStateEnum; 20 import csbr.cloud.entity.enums.ApprovalStateEnum;
21 import io.seata.common.util.DateUtil;
23 import jakarta.annotation.Resource; 22 import jakarta.annotation.Resource;
23 import lombok.extern.slf4j.Slf4j;
24 import org.apache.commons.collections.CollectionUtils; 24 import org.apache.commons.collections.CollectionUtils;
25 import org.apache.commons.lang.StringUtils; 25 import org.apache.commons.lang.StringUtils;
26 import org.springframework.stereotype.Component; 26 import org.springframework.stereotype.Component;
27 import java.util.ArrayList;
28 import java.util.Date;
27 import java.util.List; 29 import java.util.List;
28 import java.util.Map; 30 import java.util.Map;
29 31
...@@ -34,6 +36,7 @@ import java.util.Map; ...@@ -34,6 +36,7 @@ import java.util.Map;
34 * @create: 2024-08-05 36 * @create: 2024-08-05
35 **/ 37 **/
36 @Component 38 @Component
39 @Slf4j
37 public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeApproveService { 40 public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeApproveService {
38 41
39 @Resource 42 @Resource
...@@ -51,6 +54,91 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro ...@@ -51,6 +54,91 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
51 @Resource 54 @Resource
52 private PersonelFeign personelFeign; 55 private PersonelFeign personelFeign;
53 56
57 /** 生成变更信息列表 */
58 @Override
59 public List<ChangeInfoVO> getChange(String tenantName){
60 LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = new LambdaQueryWrapper<>();
61 queryWrapper.eq(MfEnterpriseChangeApprove::getTenantName,tenantName);
62 queryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime);
63 List<MfEnterpriseChangeApprove> approveList = mfEnterpriseChangeApproveService.list(queryWrapper);
64 if(CollectionUtils.isEmpty(approveList)){
65 return new ArrayList<>();
66 }
67 List<ChangeApproveBean> beanList = getChangeBeanList(approveList);
68 try {
69 return getChangeList(beanList);
70 } catch (IllegalAccessException e) {
71 e.printStackTrace();
72 }
73 return new ArrayList<>();
74 }
75
76 public static void test(){
77 List<ChangeApproveBean> beanList = new ArrayList<>();
78 ChangeApproveBean bean = new ChangeApproveBean();
79
80 MfEnterprise oldBean = new MfEnterprise();
81 oldBean.setBankTaxNo("999");
82 oldBean.setTenantName("武汉小米");
83 oldBean.setCreateTime(new Date());
84
85 MfEnterprise newBean = new MfEnterprise();
86 newBean.setBankTaxNo("666");
87 newBean.setTenantName("武汉大米");
88 newBean.setCreateTime(new Date());
89
90 bean.oldBean = oldBean;
91 bean.newBean = newBean;
92 beanList.add(bean);
93 List<ChangeInfoVO> list = new ArrayList<>();
94 try {
95 list = getChangeList(beanList);
96 } catch (IllegalAccessException e) {
97 e.printStackTrace();
98 }
99 log.info("变更内容:{}", JSON.toJSONString(list));
100 }
101
102 /** 计算变更信息 */
103 public static List<ChangeInfoVO> getChangeList(List<ChangeApproveBean> beanList) throws IllegalAccessException {
104 List<ChangeInfoVO> list = new ArrayList<>();
105 //循环对比每组记录生来变更内容
106 for(ChangeApproveBean item : beanList){
107 List<CompareResult> diffList = ObjectUtil.getBeanDiff(item.oldBean,item.newBean);
108 for(CompareResult diffItem : diffList){
109 ChangeInfoVO vo = new ChangeInfoVO();
110 vo.setName(diffItem.getFieldComment());
111 vo.setDate(DateUtil.formatDate(item.oldBean.getCreateTime(),"yyyy-MM-dd"));
112 vo.setBefore(diffItem.getOldValue().toString());
113 vo.setAfter(diffItem.getNewValue().toString());
114 list.add(vo);
115 }
116 }
117
118 return list;
119 }
120
121 /** 准备变更对比实体 */
122 private List<ChangeApproveBean> getChangeBeanList(List<MfEnterpriseChangeApprove> list){
123 List<ChangeApproveBean> beanList = new ArrayList<>();
124 for(MfEnterpriseChangeApprove item : list){
125 if("1".equals(item.getDataType())){
126 ChangeApproveBean bean = new ChangeApproveBean();
127 bean.oldBean = csbrBeanUtil.convert(item,MfEnterprise.class);
128 beanList.add(bean);
129 }
130 if("2".equals(item.getDataType())){
131 ChangeApproveBean bean = beanList.get(beanList.size() - 1);
132 bean.newBean = csbrBeanUtil.convert(item,MfEnterprise.class);
133 }
134 }
135 return beanList;
136 }
137
138 public static class ChangeApproveBean{
139 public MfEnterprise oldBean;
140 public MfEnterprise newBean;
141 }
54 142
55 /** 保存变更数据 */ 143 /** 保存变更数据 */
56 @Override 144 @Override
......
...@@ -4,8 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,8 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 4 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
5 import com.csbr.cloud.common.enums.SystemError; 5 import com.csbr.cloud.common.enums.SystemError;
6 import com.csbr.cloud.common.enums.WorkFlowBizEnum; 6 import com.csbr.cloud.common.enums.WorkFlowBizEnum;
7 import com.csbr.qingcloud.portal.domain.vo.TenantRQVO; 7 import com.csbr.qingcloud.portal.domain.vo.*;
8 import com.csbr.qingcloud.portal.feign.PersonelFeign; 8 import com.csbr.qingcloud.portal.feign.PersonelFeign;
9 import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService;
9 import csbr.cloud.entity.enums.ApprovalStateEnum; 10 import csbr.cloud.entity.enums.ApprovalStateEnum;
10 import com.csbr.cloud.common.exception.CsbrSystemException; 11 import com.csbr.cloud.common.exception.CsbrSystemException;
11 import com.csbr.cloud.common.util.CommonUtil; 12 import com.csbr.cloud.common.util.CommonUtil;
...@@ -17,9 +18,6 @@ import csbr.cloud.entity.domain.base.vo.PageListVO; ...@@ -17,9 +18,6 @@ import csbr.cloud.entity.domain.base.vo.PageListVO;
17 import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO; 18 import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
18 import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO; 19 import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
19 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO; 20 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
20 import com.csbr.qingcloud.portal.domain.vo.EnterpriseQueryVO;
21 import com.csbr.qingcloud.portal.domain.vo.EnterpriseRQVO;
22 import com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO;
23 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise; 21 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
24 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService; 22 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
25 import com.csbr.qingcloud.portal.service.EnterpriseService; 23 import com.csbr.qingcloud.portal.service.EnterpriseService;
...@@ -64,6 +62,9 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris ...@@ -64,6 +62,9 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
64 @Resource 62 @Resource
65 private PersonelFeign personelFeign; 63 private PersonelFeign personelFeign;
66 64
65 @Resource
66 private EnterpriseChangeApproveService enterpriseChangeApproveService;
67
67 /** 68 /**
68 * 企业信息分页查询 69 * 企业信息分页查询
69 * @author xcq 70 * @author xcq
...@@ -105,9 +106,14 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris ...@@ -105,9 +106,14 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
105 if (entity == null) { 106 if (entity == null) {
106 throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME))); 107 throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
107 } 108 }
108 return convertToVO(entity); 109 EnterpriseRSVO vo = convertToVO(entity);
110 //生成变更信息
111 vo.setChangeList(enterpriseChangeApproveService.getChange(entity.getTenantName()));
112 return vo;
109 } 113 }
110 114
115
116
111 /** 117 /**
112 * 企业信息数据新增 118 * 企业信息数据新增
113 * @author xcq 119 * @author xcq
......
1 package com.csbr.qingcloud.portal.util;
2
3 import com.csbr.qingcloud.portal.domain.vo.CompareResult;
4 import jdk.jfr.Name;
5 import java.lang.reflect.Field;
6 import java.math.BigDecimal;
7 import java.text.SimpleDateFormat;
8 import java.util.ArrayList;
9 import java.util.Date;
10 import java.util.List;
11
12 /** 对象工具 */
13 public class ObjectUtil {
14 /** 对比两个对象 */
15 public static List<CompareResult> getBeanDiff(Object oldObj, Object newObj) throws IllegalAccessException {
16 List<CompareResult> list = new ArrayList<>();
17 //获取对象的class
18 Class<?> clazz1 = oldObj.getClass();
19 Class<?> clazz2 = newObj.getClass();
20 //获取对象的属性列表
21 Field[] field1 = clazz1.getDeclaredFields();
22 Field[] field2 = clazz2.getDeclaredFields();
23
24 //遍历属性列表field1
25 for (int i = 0; i < field1.length; i++) {
26 //遍历属性列表field2
27 for (int j = 0; j < field2.length; j++) {
28 CompareResult r = getCompareResult(field1[i], field2[j], oldObj, newObj);
29 if (r == null) {
30 continue;
31 }
32 list.add(r);
33 break;
34 }
35 }
36 return list;
37 }
38
39 /** 对比两个字段 */
40 public static CompareResult getCompareResult(Field oldField, Field newField, Object oldObj, Object newObj) throws IllegalAccessException {
41 //字段名称不同-返回空
42 if (!oldField.getName().equals(newField.getName())) {
43 return null;
44 }
45 oldField.setAccessible(true);
46 newField.setAccessible(true);
47 //值相同-返回空
48 if (compareTwo(oldField.get(oldObj), newField.get(newObj))) {
49 return null;
50 }
51 CompareResult r = new CompareResult();
52 r.setFieldName(oldField.getName());
53 r.setOldValue(oldField.get(oldObj));
54 r.setNewValue(newField.get(newObj));
55 try {
56 r.setFieldComment(oldField.getAnnotation(Name.class) == null ? "" : oldField.getAnnotation(Name.class).value());
57 } catch (Exception e) {
58 r.setFieldComment("");
59 }
60 if (oldField.getType() == Date.class) {
61 r.setOldValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) oldField.get(oldObj)));
62 r.setNewValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) newField.get(newObj)));
63 }
64 return r;
65 }
66
67 /** 对比两个数据是否内容相同 */
68 public static boolean compareTwo(Object object1, Object object2) {
69 if (object1 == null && object2 == null) {
70 return true;
71 }
72 if (object1 != null && object2 == null) {
73 return false;
74 }
75 if (object2 != null && object1 == null) {
76 return false;
77 }
78 if (object1.equals(object2)) {
79 return true;
80 }
81 if("BigDecimal".equals(object2.getClass().getSimpleName())){
82 BigDecimal obj1 = (BigDecimal)object1;
83 BigDecimal obj2 = (BigDecimal)object2;
84 if(obj1.compareTo(obj2) == 0){
85 return true;
86 }
87 }
88 String obj1 = object1.toString().replace("[","").replace("]","").replace("\"","").replace(" ","");
89 String obj2 = object2.toString().replace("[","").replace("]","").replace("\"","").replace(" ","");
90 if (obj1.equals(obj2)) {
91 return true;
92 }
93 return false;
94 }
95 }
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!