【DAOP-1.0】企业认证
【功能点】变更功能开发
Showing
7 changed files
with
255 additions
and
9 deletions
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 | } |
-
Please register or sign in to post a comment