ad94ff99 by 肖初晴

【DAOP-1.0】企业认证

【功能点】变更功能开发
1 parent 6fa656c9
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.vo.CsbrBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 变更信息视图对象类
*
* @author xiaocq
* @date 2024-12-30
*/
@Data
public class ChangeInfoVO extends CsbrBaseVO {
@Schema(description = "名称")
private String name;
@Schema(description = "日期")
private String date;
@Schema(description = "变更前")
private String before;
@Schema(description = "变更后")
private String after;
}
package com.csbr.qingcloud.portal.domain.vo;
import lombok.Data;
/** 对比对象 */
@Data
public class CompareResult {
/** 字段名 */
private String fieldName;
/** 旧值 */
private Object oldValue;
/** 新值 */
private Object newValue;
/** 字段中文名 */
private String fieldComment;
}
......@@ -6,6 +6,7 @@ import lombok.Data;
import com.csbr.cloud.workflow.domain.vo.appove.BizApproveVO;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @program: D:/git/ms-data-circulation-portal-service
......@@ -186,6 +187,9 @@ public class EnterpriseRSVO {
@Schema(description = "审批信息")
private BizApproveVO approveVO;
@Schema(description = "变更信息列表")
private List<ChangeInfoVO> changeList;
/******** 子对象 *****/
}
......
......@@ -2,6 +2,8 @@ package com.csbr.qingcloud.portal.service;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.ChangeApproveVO;
import com.csbr.qingcloud.portal.domain.vo.ChangeInfoVO;
import java.util.List;
/**
* @description: 供应商商品变更
......@@ -14,4 +16,6 @@ public interface EnterpriseChangeApproveService {
ChangeApproveVO changeDetail(String guid);
void changeUpdate(BizCallbackDTO dto);
List<ChangeInfoVO> getChange(String tenantName);
}
......
......@@ -8,10 +8,7 @@ import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.util.CommonUtil;
import com.csbr.cloud.common.util.CsbrBeanUtil;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
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.domain.vo.*;
import com.csbr.qingcloud.portal.feign.PersonelFeign;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
......@@ -19,11 +16,16 @@ 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.ObjectUtil;
import csbr.cloud.entity.enums.ApprovalStateEnum;
import io.seata.common.util.DateUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -34,6 +36,7 @@ import java.util.Map;
* @create: 2024-08-05
**/
@Component
@Slf4j
public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeApproveService {
@Resource
......@@ -51,6 +54,91 @@ public class EnterpriseChangeApproveServiceImpl implements EnterpriseChangeAppro
@Resource
private PersonelFeign personelFeign;
/** 生成变更信息列表 */
@Override
public List<ChangeInfoVO> getChange(String tenantName){
LambdaQueryWrapper<MfEnterpriseChangeApprove> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MfEnterpriseChangeApprove::getTenantName,tenantName);
queryWrapper.orderByDesc(MfEnterpriseChangeApprove::getCreateTime);
List<MfEnterpriseChangeApprove> approveList = mfEnterpriseChangeApproveService.list(queryWrapper);
if(CollectionUtils.isEmpty(approveList)){
return new ArrayList<>();
}
List<ChangeApproveBean> beanList = getChangeBeanList(approveList);
try {
return getChangeList(beanList);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return new ArrayList<>();
}
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));
}
/** 计算变更信息 */
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);
for(CompareResult diffItem : diffList){
ChangeInfoVO vo = new ChangeInfoVO();
vo.setName(diffItem.getFieldComment());
vo.setDate(DateUtil.formatDate(item.oldBean.getCreateTime(),"yyyy-MM-dd"));
vo.setBefore(diffItem.getOldValue().toString());
vo.setAfter(diffItem.getNewValue().toString());
list.add(vo);
}
}
return list;
}
/** 准备变更对比实体 */
private List<ChangeApproveBean> getChangeBeanList(List<MfEnterpriseChangeApprove> list){
List<ChangeApproveBean> beanList = new ArrayList<>();
for(MfEnterpriseChangeApprove item : list){
if("1".equals(item.getDataType())){
ChangeApproveBean bean = new ChangeApproveBean();
bean.oldBean = csbrBeanUtil.convert(item,MfEnterprise.class);
beanList.add(bean);
}
if("2".equals(item.getDataType())){
ChangeApproveBean bean = beanList.get(beanList.size() - 1);
bean.newBean = csbrBeanUtil.convert(item,MfEnterprise.class);
}
}
return beanList;
}
public static class ChangeApproveBean{
public MfEnterprise oldBean;
public MfEnterprise newBean;
}
/** 保存变更数据 */
@Override
......
......@@ -4,8 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.enums.WorkFlowBizEnum;
import com.csbr.qingcloud.portal.domain.vo.TenantRQVO;
import com.csbr.qingcloud.portal.domain.vo.*;
import com.csbr.qingcloud.portal.feign.PersonelFeign;
import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService;
import csbr.cloud.entity.enums.ApprovalStateEnum;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.util.CommonUtil;
......@@ -17,9 +18,6 @@ import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseQueryVO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseRQVO;
import com.csbr.qingcloud.portal.domain.vo.EnterpriseRSVO;
import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
import com.csbr.qingcloud.portal.service.EnterpriseService;
......@@ -64,6 +62,9 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
@Resource
private PersonelFeign personelFeign;
@Resource
private EnterpriseChangeApproveService enterpriseChangeApproveService;
/**
* 企业信息分页查询
* @author xcq
......@@ -105,9 +106,14 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
return convertToVO(entity);
EnterpriseRSVO vo = convertToVO(entity);
//生成变更信息
vo.setChangeList(enterpriseChangeApproveService.getChange(entity.getTenantName()));
return vo;
}
/**
* 企业信息数据新增
* @author xcq
......
package com.csbr.qingcloud.portal.util;
import com.csbr.qingcloud.portal.domain.vo.CompareResult;
import jdk.jfr.Name;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** 对象工具 */
public class ObjectUtil {
/** 对比两个对象 */
public static List<CompareResult> getBeanDiff(Object oldObj, Object newObj) throws IllegalAccessException {
List<CompareResult> list = new ArrayList<>();
//获取对象的class
Class<?> clazz1 = oldObj.getClass();
Class<?> clazz2 = newObj.getClass();
//获取对象的属性列表
Field[] field1 = clazz1.getDeclaredFields();
Field[] field2 = clazz2.getDeclaredFields();
//遍历属性列表field1
for (int i = 0; i < field1.length; i++) {
//遍历属性列表field2
for (int j = 0; j < field2.length; j++) {
CompareResult r = getCompareResult(field1[i], field2[j], oldObj, newObj);
if (r == null) {
continue;
}
list.add(r);
break;
}
}
return list;
}
/** 对比两个字段 */
public static CompareResult getCompareResult(Field oldField, Field newField, Object oldObj, Object newObj) throws IllegalAccessException {
//字段名称不同-返回空
if (!oldField.getName().equals(newField.getName())) {
return null;
}
oldField.setAccessible(true);
newField.setAccessible(true);
//值相同-返回空
if (compareTwo(oldField.get(oldObj), newField.get(newObj))) {
return null;
}
CompareResult r = new CompareResult();
r.setFieldName(oldField.getName());
r.setOldValue(oldField.get(oldObj));
r.setNewValue(newField.get(newObj));
try {
r.setFieldComment(oldField.getAnnotation(Name.class) == null ? "" : oldField.getAnnotation(Name.class).value());
} catch (Exception e) {
r.setFieldComment("");
}
if (oldField.getType() == Date.class) {
r.setOldValue(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)));
}
return r;
}
/** 对比两个数据是否内容相同 */
public static boolean compareTwo(Object object1, Object object2) {
if (object1 == null && object2 == null) {
return true;
}
if (object1 != null && object2 == null) {
return false;
}
if (object2 != null && object1 == null) {
return false;
}
if (object1.equals(object2)) {
return true;
}
if("BigDecimal".equals(object2.getClass().getSimpleName())){
BigDecimal obj1 = (BigDecimal)object1;
BigDecimal obj2 = (BigDecimal)object2;
if(obj1.compareTo(obj2) == 0){
return true;
}
}
String obj1 = object1.toString().replace("[","").replace("]","").replace("\"","").replace(" ","");
String obj2 = object2.toString().replace("[","").replace("]","").replace("\"","").replace(" ","");
if (obj1.equals(obj2)) {
return true;
}
return false;
}
}
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!