From f3fe5bd5b6f18add96ddeb9f0a1fcc8e4daddb02 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 25 Apr 2023 17:07:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 + .../model/annotation/BusinessDifference.java | 20 +++ .../serve/common/model/dto/DiffFieldVal.java | 17 ++ .../common/util/BusinessDifferenceUtil.java | 79 ++++++++++ .../controller/BmsChannelPointController.java | 9 ++ .../bms/controller/BmsRegionController.java | 2 +- .../BmsSupplierContactsController.java | 39 ++++- .../BmsSupplierVisitAddressController.java | 23 ++- .../modules/bms/entity/BmsChannelPoint.java | 13 ++ .../bms/entity/BmsSupplierContacts.java | 12 ++ .../bms/entity/BmsSupplierVisitAddress.java | 14 ++ .../bms/entity/bo/BmsChannelPointBo.java | 1 - .../impl/BmsChannelPointServiceImpl.java | 15 +- .../sys/common/enums/BusinessLogOption.java | 19 +++ .../sys/common/enums/BusinessLogType.java | 20 +++ .../controller/SysBusinessLogController.java | 73 +++++++++ .../modules/sys/entity/SysBusinessLog.java | 147 ++++++++++++++++++ .../sys/mapper/SysBusinessLogMapper.java | 14 ++ .../sys/service/SysBusinessLogService.java | 25 +++ .../impl/SysBusinessLogServiceImpl.java | 82 ++++++++++ .../tbs/entity/TbsActivityChannelPoint.java | 8 + 21 files changed, 626 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/qs/serve/common/model/annotation/BusinessDifference.java create mode 100644 src/main/java/com/qs/serve/common/model/dto/DiffFieldVal.java create mode 100644 src/main/java/com/qs/serve/common/util/BusinessDifferenceUtil.java create mode 100644 src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogOption.java create mode 100644 src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogType.java create mode 100644 src/main/java/com/qs/serve/modules/sys/controller/SysBusinessLogController.java create mode 100644 src/main/java/com/qs/serve/modules/sys/entity/SysBusinessLog.java create mode 100644 src/main/java/com/qs/serve/modules/sys/mapper/SysBusinessLogMapper.java create mode 100644 src/main/java/com/qs/serve/modules/sys/service/SysBusinessLogService.java create mode 100644 src/main/java/com/qs/serve/modules/sys/service/impl/SysBusinessLogServiceImpl.java diff --git a/pom.xml b/pom.xml index 5cbda664..8a67ed1d 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,12 @@ + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.13.0 + + cn.hutool hutool-all diff --git a/src/main/java/com/qs/serve/common/model/annotation/BusinessDifference.java b/src/main/java/com/qs/serve/common/model/annotation/BusinessDifference.java new file mode 100644 index 00000000..394d5926 --- /dev/null +++ b/src/main/java/com/qs/serve/common/model/annotation/BusinessDifference.java @@ -0,0 +1,20 @@ +package com.qs.serve.common.model.annotation; + +import java.lang.annotation.*; + +/** + * @author YenHex + * @since 2023/4/25 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface BusinessDifference { + + /** + * 字段备注 + * @return + */ + String value() default ""; + +} diff --git a/src/main/java/com/qs/serve/common/model/dto/DiffFieldVal.java b/src/main/java/com/qs/serve/common/model/dto/DiffFieldVal.java new file mode 100644 index 00000000..021bf12c --- /dev/null +++ b/src/main/java/com/qs/serve/common/model/dto/DiffFieldVal.java @@ -0,0 +1,17 @@ +package com.qs.serve.common.model.dto; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/25 + */ +@Data +public class DiffFieldVal { + + String field; + String comment; + String orgValue; + String newValue; + +} diff --git a/src/main/java/com/qs/serve/common/util/BusinessDifferenceUtil.java b/src/main/java/com/qs/serve/common/util/BusinessDifferenceUtil.java new file mode 100644 index 00000000..5e544ffb --- /dev/null +++ b/src/main/java/com/qs/serve/common/util/BusinessDifferenceUtil.java @@ -0,0 +1,79 @@ +package com.qs.serve.common.util; + +import com.qs.serve.common.framework.mybatis.join.annotations.BindEntity; +import com.qs.serve.common.model.annotation.BusinessDifference; +import com.qs.serve.common.model.dto.DiffFieldVal; +import com.qs.serve.modules.bms.entity.BmsSupplierContacts; +import com.qs.serve.modules.sys.entity.SysBusinessLog; +import lombok.SneakyThrows; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +/** + * @author YenHex + * @since 2023/4/25 + */ +public class BusinessDifferenceUtil { + + @SneakyThrows + public static List getDifferenceList(T orgVal, T newVal){ + List diffFieldValList = new ArrayList<>(); + if(orgVal==null||newVal==null){ + return diffFieldValList; + } + Class clazz = null; + try { + clazz = Class.forName(orgVal.getClass().getName()); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + if(clazz==null){return diffFieldValList;} + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + for (Annotation annotation : field.getAnnotations()) { + if(annotation instanceof BusinessDifference){ + BusinessDifference busDiff = (BusinessDifference) annotation; + field.setAccessible(true); + Object orgValue = field.get(orgVal); + Object newValue = field.get(newVal); + if(newValue==null){ + continue; + } + if(orgValue==null){ + orgValue = ""; + } + if(!orgValue.equals(newValue)){ + DiffFieldVal fieldVal = new DiffFieldVal(); + fieldVal.setField(field.getName()); + fieldVal.setNewValue(newValue.toString()); + fieldVal.setOrgValue(orgValue.toString()); + fieldVal.setComment(busDiff.value()); + diffFieldValList.add(fieldVal); + } + } + } + } + return diffFieldValList; + } + + public static void main(String[] args) { + BmsSupplierContacts supplierContacts = new BmsSupplierContacts(); + supplierContacts.setContactsName("名称1"); + supplierContacts.setContactsPost("setContactsPost"); + + + BmsSupplierContacts supplierContacts2 = new BmsSupplierContacts(); + supplierContacts2.setContactsName("名称2"); + supplierContacts2.setContactsNumber("123456"); + supplierContacts2.setContactsPost("setContactsPost"); + + List diffFieldValList =BusinessDifferenceUtil.getDifferenceList(supplierContacts,supplierContacts2); + for (DiffFieldVal fieldVal : diffFieldValList) { + System.out.println(JsonUtil.objectToJson(fieldVal)); + } + } + +} diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java index 7bb4a41b..fcca7612 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java @@ -25,6 +25,8 @@ import com.qs.serve.modules.bms.service.BmsChannelService; import com.qs.serve.modules.bms.service.BmsRegion2Service; import com.qs.serve.modules.bms.service.BmsRegionService; import com.qs.serve.modules.his.service.HisUserChannelPointService; +import com.qs.serve.modules.sys.common.enums.BusinessLogType; +import com.qs.serve.modules.sys.service.SysBusinessLogService; import com.qs.serve.modules.tbs.entity.TbsActivityChannelPoint; import com.qs.serve.modules.tbs.service.TbsActivityChannelPointService; import lombok.AllArgsConstructor; @@ -50,6 +52,7 @@ import java.util.stream.Collectors; @RequestMapping("bms/channelPoint") public class BmsChannelPointController { + private SysBusinessLogService businessLogService; private BazVisitInfoService bazVisitInfoService; private BmsChannelPointService bmsChannelPointService; private BmsRegionService bmsRegionService; @@ -149,7 +152,10 @@ public class BmsChannelPointController { @PostMapping("/updateMapInfo") public R updateById(@RequestBody BmsChannelPointMapInfoBo param){ BmsChannelPoint channelPoint = CopierUtil.copy(param,new BmsChannelPoint()); + BmsChannelPoint orgData = bmsChannelPointService.getById(channelPoint.getId()); bmsChannelPointService.updateById(channelPoint); + businessLogService.buildLog4Change(BusinessLogType.Point, + channelPoint.getId()+"",channelPoint.getPointCode(),channelPoint.getPointName(),null,orgData,channelPoint); if(!StringUtils.hasText(param.getLocalX())||!StringUtils.hasText(param.getLocalY())){ channelPointMapper.updateSetNullOfMapInfo(param.getId()); } @@ -183,8 +189,11 @@ public class BmsChannelPointController { if(activityChannelPointService.count(lqw)>0){ return R.error("活动含当前站点,删除失败"); } + BmsChannelPoint point = bmsChannelPointService.getById(id); boolean result = bmsChannelPointService.removeById(id); hisUserChannelPointService.removeByPointId(id); + //添加日志 + businessLogService.buildLog4Delete(BusinessLogType.Point,id+"",point.getPointCode(),point.getPointName(),null); return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java index 1f8ae88c..55ff1cf9 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java @@ -75,7 +75,7 @@ public class BmsRegionController { /** * 树查询 * @param listUserFlag 加载我负责的用户所属的区域 - * @param loadByCurrent 值=1,过滤当前用户负责数据 + * @param loadByCurrent 值=1,过滤当前用户负责数据(优先级最高) * @return */ @GetMapping("/tree") diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierContactsController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierContactsController.java index a776f79c..aed4e2ef 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierContactsController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierContactsController.java @@ -7,12 +7,13 @@ import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; -import com.qs.serve.common.util.Assert; -import com.qs.serve.common.util.PageUtil; -import com.qs.serve.common.util.CopierUtil; -import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.*; import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.service.BmsSupplierService; +import com.qs.serve.modules.sys.common.enums.BusinessLogOption; +import com.qs.serve.modules.sys.common.enums.BusinessLogType; +import com.qs.serve.modules.sys.entity.SysBusinessLog; +import com.qs.serve.modules.sys.service.SysBusinessLogService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -38,6 +39,7 @@ import java.util.List; public class BmsSupplierContactsController { private BmsSupplierContactsService bmsSupplierContactsService; + private SysBusinessLogService businessLogService; private BmsSupplierService bmsSupplierService; /** @@ -95,7 +97,17 @@ public class BmsSupplierContactsController { BmsSupplier supplier = bmsSupplierService.getById(param.getSupplierId()); entity.setSupplierCode(supplier.getCode()); entity.setSupplierName(supplier.getName()); + BmsSupplierContacts orgContacts = bmsSupplierContactsService.getById(param.getId()); boolean result = bmsSupplierContactsService.updateById(entity); + //记录变更人 + businessLogService.buildLog4Change( + BusinessLogType.SupplierContacts, + supplier.getId(), + supplier.getCode(), + supplier.getName(), + param.getId()+"", + orgContacts, + entity); return R.isTrue(result); } @@ -115,6 +127,14 @@ public class BmsSupplierContactsController { entity.setSupplierCode(supplier.getCode()); entity.setSupplierName(supplier.getName()); bmsSupplierContactsService.save(entity); + //记录变更人 + businessLogService.buildLog4Save( + BusinessLogType.SupplierContacts, + supplier.getId(), + supplier.getCode(), + supplier.getName(), + param.getId()+"", + entity); return R.ok(entity); } @@ -127,6 +147,17 @@ public class BmsSupplierContactsController { @SysLog(module = SystemModule.BASE, title = "供应商联系人", biz = BizType.DELETE) public R deleteById(@PathVariable("ids") String ids){ List idsLong = StringUtils.splitIdLong(ids); + assert idsLong != null; + for (Long id : idsLong) { + BmsSupplierContacts supplierContacts = bmsSupplierContactsService.getById(id); + BmsSupplier supplier = bmsSupplierService.getById(supplierContacts.getSupplierId()); + businessLogService.buildLog4Delete( + BusinessLogType.SupplierContacts, + supplier.getId(), + supplier.getCode(), + supplier.getName(), + id+""); + } boolean result = bmsSupplierContactsService.removeByIds(idsLong); return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java index e72f43df..a3e2c7e1 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java @@ -23,6 +23,8 @@ import com.qs.serve.modules.his.entity.HisUserSupplier; import com.qs.serve.modules.his.entity.dto.HisUserSupplierAddressVo; import com.qs.serve.modules.his.mapper.HisUserSupplierMapper; import com.qs.serve.modules.his.service.HisUserSupplierService; +import com.qs.serve.modules.sys.common.enums.BusinessLogType; +import com.qs.serve.modules.sys.service.SysBusinessLogService; import com.qs.serve.modules.sys.service.SysUserService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -47,6 +49,7 @@ import java.util.stream.Collectors; @RequestMapping("bms/supplierVisitAddress") public class BmsSupplierVisitAddressController { + private SysBusinessLogService businessLogService; private BazVisitInfoService bazVisitInfoService; private BmsSupplierVisitAddressService bmsSupplierVisitAddressService; private BmsSupplierService bmsSupplierService; @@ -210,7 +213,10 @@ public class BmsSupplierVisitAddressController { @SysLog(module = SystemModule.BASE, title = "供应商拜访地址", biz = BizType.UPDATE) @PreAuthorize("hasRole('bms:supplierVisitAddress:update')") public R updateById(@RequestBody @Valid BmsSupplierVisitAddress param){ + BmsSupplierVisitAddress dbData = bmsSupplierVisitAddressService.getById(param.getId()); boolean result = bmsSupplierVisitAddressService.updateById(param); + businessLogService.buildLog4Change(BusinessLogType.SupplierAddress,dbData.getSupplierId().toString(), + dbData.getSupplierCode(),dbData.getSupplierName(),dbData.getId(),dbData,param); return R.isTrue(result); } @@ -223,6 +229,8 @@ public class BmsSupplierVisitAddressController { @SysLog(module = SystemModule.BASE, title = "供应商拜访地址", biz = BizType.INSERT) @PreAuthorize("hasRole('bms:supplierVisitAddress:insert')") public R save(@RequestBody @Valid BmsSupplierVisitAddress param){ + businessLogService.buildLog4Save(BusinessLogType.SupplierAddress,param.getSupplierId().toString(), + param.getSupplierCode(),param.getSupplierName(),param.getId(),param); bmsSupplierVisitAddressService.save(param); return R.ok(param); } @@ -237,11 +245,16 @@ public class BmsSupplierVisitAddressController { @PreAuthorize("hasRole('bms:supplierVisitAddress:delete')") public R deleteById(@PathVariable("ids") String ids){ List idsLong = StringUtils.splitIdString(ids); - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.in(BazVisitFlow::getFormId,idsLong); - long count = bazVisitFlowService.count(lqw); - if(count>0){ - return R.error("含有使用表单的业务,无法删除"); +// LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); +// lqw.in(BazVisitFlow::getFormId,idsLong); +// long count = bazVisitFlowService.count(lqw); +// if(count>0){ +// return R.error("含有使用表单的业务,无法删除"); +// } + List visitAddressList = bmsSupplierVisitAddressService.listByIds(idsLong); + for (BmsSupplierVisitAddress visitAddress : visitAddressList) { + businessLogService.buildLog4Delete(BusinessLogType.SupplierAddress,visitAddress.getSupplierId().toString(), + visitAddress.getSupplierCode(),visitAddress.getSupplierName(),visitAddress.getId()); } boolean result = bmsSupplierVisitAddressService.removeByIds(idsLong); return R.isTrue(result); diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java index 40d996f2..eefcced0 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java @@ -7,7 +7,12 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler; +import com.qs.serve.common.model.annotation.BusinessDifference; import lombok.Data; import org.apache.ibatis.type.JdbcType; import org.hibernate.validator.constraints.Length; @@ -48,6 +53,7 @@ public class BmsChannelPoint implements Serializable { @NotBlank(message = "站点名称不能为空") @Length(max = 30,message = "站点名称长度不能超过30字") @TableField(condition = SqlCondition.LIKE) + @BusinessDifference("网点名称") private String pointName; /** 店铺面积 */ @@ -68,6 +74,7 @@ public class BmsChannelPoint implements Serializable { /** 详细地址 */ @Length(max = 255,message = "详细地址长度不能超过255字") + @BusinessDifference("详细地址") private String address; /** 销售区域id */ @@ -77,6 +84,7 @@ public class BmsChannelPoint implements Serializable { /** 销售区域 */ @NotBlank(message = "销售区域不能为空") @Length(max = 255,message = "销售区域长度不能超过255字") + @BusinessDifference("销售区域") private String saleRegionPath; private String saleRegionPathIds; @@ -88,6 +96,7 @@ public class BmsChannelPoint implements Serializable { /** 行政区域 */ @NotBlank(message = "行政区域不能为空") @Length(max = 255,message = "行政区域长度不能超过255字") + @BusinessDifference("行政区域") private String bizRegionPath; private String bizRegionPathIds; @@ -115,12 +124,16 @@ public class BmsChannelPoint implements Serializable { /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** 最后更新时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierContacts.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierContacts.java index 54239663..c48dff7b 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierContacts.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierContacts.java @@ -9,6 +9,11 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.qs.serve.common.model.annotation.BusinessDifference; import lombok.Data; import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; @@ -47,16 +52,19 @@ public class BmsSupplierContacts implements Serializable { /** 联系号码 */ @Length(max = 255,message = "联系号码长度不能超过255字") @TableField(condition = SqlCondition.LIKE) + @BusinessDifference("联系号码") private String contactsNumber; /** 联系名称 */ @Length(max = 255,message = "联系名称长度不能超过255字") @TableField(condition = SqlCondition.LIKE) + @BusinessDifference("联系名称") private String contactsName; /** 联系岗位 */ @Length(max = 255,message = "联系岗位长度不能超过255字") @TableField(condition = SqlCondition.LIKE) + @BusinessDifference("联系岗位") private String contactsPost; /** 备注 */ @@ -65,6 +73,8 @@ public class BmsSupplierContacts implements Serializable { /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @@ -75,6 +85,8 @@ public class BmsSupplierContacts implements Serializable { /** 更新时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierVisitAddress.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierVisitAddress.java index 567f15da..f398d99b 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierVisitAddress.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierVisitAddress.java @@ -9,7 +9,12 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler; +import com.qs.serve.common.model.annotation.BusinessDifference; import lombok.Data; import org.apache.ibatis.type.JdbcType; import org.hibernate.validator.constraints.Length; @@ -44,21 +49,26 @@ public class BmsSupplierVisitAddress implements Serializable { /** 详细地址 */ @NotBlank(message = "详细地址不能为空") @Length(max = 255,message = "详细地址长度不能超过255字") + @BusinessDifference("详细地址") private String addressDetail; /** 地址类型 */ + @BusinessDifference("地址类型") private String addressType; + @BusinessDifference("定位地址") private String localAddress; private Integer defaultFlag; /** 纬度 */ @Length(max = 255,message = "纬度长度不能超过255字") + @BusinessDifference("纬度") private String localX; /** 经度 */ @Length(max = 255,message = "经度长度不能超过255字") + @BusinessDifference("经度") private String localY; /** 备注 */ @@ -69,12 +79,16 @@ public class BmsSupplierVisitAddress implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(fill = FieldFill.INSERT) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) private LocalDateTime createTime; /** 最后更新时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @TableField(fill = FieldFill.UPDATE) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) private LocalDateTime updateTime; /** 所属租户 */ diff --git a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java index 395f24f1..331ba3bf 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java @@ -84,7 +84,6 @@ public class BmsChannelPointBo { private String mapAddress; /** 行政区域 */ - @NotBlank(message = "行政区域不能为空") @Length(max = 255,message = "行政区域长度不能超过255字") private String bizRegionPath; diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java index 1a897eb0..1ab54535 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java @@ -12,11 +12,14 @@ import com.qs.serve.modules.bms.service.BmsChannelService; import com.qs.serve.modules.bms.service.BmsRegion2Service; import com.qs.serve.modules.bms.service.BmsRegionService; import com.qs.serve.modules.his.service.HisUserChannelPointService; +import com.qs.serve.modules.sys.common.enums.BusinessLogType; +import com.qs.serve.modules.sys.service.SysBusinessLogService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.qs.serve.modules.bms.service.BmsChannelPointService; import com.qs.serve.modules.bms.mapper.BmsChannelPointMapper; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -34,11 +37,13 @@ public class BmsChannelPointServiceImpl extends ServiceImpl mgrLqw = new LambdaQueryWrapper<>(); mgrLqw.eq(BmsMasterUser::getType, MasterUserType.Point); mgrLqw.eq(BmsMasterUser::getTargetId,channelPoint.getId()); diff --git a/src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogOption.java b/src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogOption.java new file mode 100644 index 00000000..d3552350 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogOption.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.sys.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author YenHex + * @since 2023/4/25 + */ +@Getter +@AllArgsConstructor +public enum BusinessLogOption { + + SAVE("新增"), + UPDATE("修改"), + DELETE("删除"); + String label; + +} diff --git a/src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogType.java b/src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogType.java new file mode 100644 index 00000000..75d7a1c6 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/common/enums/BusinessLogType.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.sys.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author YenHex + * @since 2023/4/25 + */ +@Getter +@AllArgsConstructor +public enum BusinessLogType { + + SupplierContacts("客户联系人"), + SupplierAddress("客户地址"), + Point("网点信息"); + + String label; + +} diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysBusinessLogController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysBusinessLogController.java new file mode 100644 index 00000000..f2b6c9a7 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysBusinessLogController.java @@ -0,0 +1,73 @@ +package com.qs.serve.modules.sys.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.StringUtils; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.sys.entity.SysBusinessLog; +import com.qs.serve.modules.sys.service.SysBusinessLogService; + +import java.util.List; + +/** + * 系统 系统业务日志 + * @author YenHex + * @since 2023-04-25 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("sys/businessLog") +public class SysBusinessLogController { + + private SysBusinessLogService sysBusinessLogService; + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + public R> getPage(SysBusinessLog param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + PageUtil.startPage(); + List list = sysBusinessLogService.list(lqw); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + public R getById(@PathVariable("id") String id){ + SysBusinessLog sysBusinessLog = sysBusinessLogService.getById(id); + return R.ok(sysBusinessLog); + } + + + + /** + * 删除 + * @param ids + * @return + */ + @DeleteMapping("/deleteById/{ids}") + public R deleteById(@PathVariable("ids") String ids){ + List idsLong = StringUtils.splitIdLong(ids); + boolean result = sysBusinessLogService.removeByIds(idsLong); + return R.isTrue(result); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysBusinessLog.java b/src/main/java/com/qs/serve/modules/sys/entity/SysBusinessLog.java new file mode 100644 index 00000000..fa3eac24 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/entity/SysBusinessLog.java @@ -0,0 +1,147 @@ +package com.qs.serve.modules.sys.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 实体类 + * @author YenHex + * @since 2023-04-25 + */ +@Data +@TableName("sys_business_log") +public class SysBusinessLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 用户id */ + @Length(max = 255,message = "用户id长度不能超过255字") + private String userId; + + /** 用户编码 */ + @Length(max = 255,message = "用户编码长度不能超过255字") + @TableField(condition = SqlCondition.LIKE) + private String userCode; + + /** 用户 */ + @Length(max = 255,message = "用户长度不能超过255字") + @TableField(condition = SqlCondition.LIKE) + private String userName; + + /** 目标类型 */ + @Length(max = 255,message = "目标类型长度不能超过255字") + private String targetType; + + /** 目标id */ + @Length(max = 255,message = "目标id长度不能超过255字") + private String targetId; + + /** 目标 */ + @Length(max = 255,message = "目标长度不能超过255字") + @TableField(condition = SqlCondition.LIKE) + private String targetCode; + + /** 目标 */ + @Length(max = 255,message = "目标长度不能超过255字") + @TableField(condition = SqlCondition.LIKE) + private String targetName; + + /** 目标关联id */ + @Length(max = 255,message = "目标关联id长度不能超过255字") + private String targetRelateId; + + /** 操作类型 */ + @Length(max = 255,message = "操作类型长度不能超过255字") + private String optType; + + /** 原来值 */ + @Length(max = 255,message = "原来值长度不能超过255字") + private String orgJson; + + /** 新值 */ + @Length(max = 255,message = "新值长度不能超过255字") + private String newJson; + + /** 差异值 */ + @Length(max = 255,message = "差异值长度不能超过255字") + private String diffJson; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + + public static SysBusinessLog toNewObject(SysBusinessLog source){ + SysBusinessLog businessLog = new SysBusinessLog(); + businessLog.setId(source.getId()); + businessLog.setUserId(source.getUserId()); + businessLog.setUserCode(source.getUserCode()); + businessLog.setUserName(source.getUserName()); + businessLog.setTargetType(source.getTargetType()); + businessLog.setTargetId(source.getTargetId()); + businessLog.setTargetCode(source.getTargetCode()); + businessLog.setTargetName(source.getTargetName()); + businessLog.setTargetRelateId(source.getTargetRelateId()); + businessLog.setOptType(source.getOptType()); + businessLog.setOrgJson(source.getOrgJson()); + businessLog.setNewJson(source.getNewJson()); + businessLog.setDiffJson(source.getDiffJson()); + businessLog.setRemark(source.getRemark()); + businessLog.setCreateTime(source.getCreateTime()); + businessLog.setUpdateTime(source.getUpdateTime()); + businessLog.setTenantId(source.getTenantId()); + businessLog.setDelFlag(source.getDelFlag()); + businessLog.setCreateBy(source.getCreateBy()); + businessLog.setUpdateBy(source.getUpdateBy()); + return businessLog; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/mapper/SysBusinessLogMapper.java b/src/main/java/com/qs/serve/modules/sys/mapper/SysBusinessLogMapper.java new file mode 100644 index 00000000..993cf6bc --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/mapper/SysBusinessLogMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.sys.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.sys.entity.SysBusinessLog; + +/** + * Mapper + * @author YenHex + * @date 2023-04-25 + */ +public interface SysBusinessLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/service/SysBusinessLogService.java b/src/main/java/com/qs/serve/modules/sys/service/SysBusinessLogService.java new file mode 100644 index 00000000..61866ceb --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/service/SysBusinessLogService.java @@ -0,0 +1,25 @@ +package com.qs.serve.modules.sys.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.sys.common.enums.BusinessLogOption; +import com.qs.serve.modules.sys.common.enums.BusinessLogType; +import com.qs.serve.modules.sys.entity.SysBusinessLog; + +/** + * 服务接口 + * @author YenHex + * @date 2023-04-25 + */ +public interface SysBusinessLogService extends IService { + + + void buildLog4Save(BusinessLogType logType, String targetId,String targetCode,String targetName, String targetRelateId,Object newVal); + + void buildLog4Delete(BusinessLogType logType, String targetId,String targetCode,String targetName,String targetRelateId); + + void buildLog4Change(BusinessLogType logType, String targetId,String targetCode,String targetName,String targetRelateId, Object orgVal, Object newVal); + + void baseBuildLog(BusinessLogType logType, String targetId,String targetCode,String targetName,String targetRelateId, Object orgVal, Object newVal,BusinessLogOption option); + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysBusinessLogServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysBusinessLogServiceImpl.java new file mode 100644 index 00000000..712f5c18 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysBusinessLogServiceImpl.java @@ -0,0 +1,82 @@ +package com.qs.serve.modules.sys.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.model.dto.DiffFieldVal; +import com.qs.serve.common.util.AuthContextUtils; +import com.qs.serve.common.util.BusinessDifferenceUtil; +import com.qs.serve.common.util.JsonUtil; +import com.qs.serve.modules.sys.common.enums.BusinessLogOption; +import com.qs.serve.modules.sys.common.enums.BusinessLogType; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.mapper.SysUserMapper; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.sys.entity.SysBusinessLog; +import com.qs.serve.modules.sys.service.SysBusinessLogService; +import com.qs.serve.modules.sys.mapper.SysBusinessLogMapper; + +import java.util.List; + +/** + * 服务实现类 + * @author YenHex + * @since 2023-04-25 + */ +@Slf4j +@Service +@AllArgsConstructor +public class SysBusinessLogServiceImpl extends ServiceImpl implements SysBusinessLogService { + + SysUserMapper sysUserMapper; + + @Override + public void buildLog4Save(BusinessLogType logType, String targetId,String targetCode,String targetName,String targetRelateId, Object newVal) { + BusinessLogOption option = BusinessLogOption.SAVE; + this.baseBuildLog(logType,targetId,targetCode,targetName,targetRelateId,null,newVal,option); + } + + @Override + public void buildLog4Delete(BusinessLogType logType, String targetId,String targetCode,String targetName,String targetRelateId) { + BusinessLogOption option = BusinessLogOption.DELETE; + this.baseBuildLog(logType,targetId,targetCode,targetName,targetRelateId,null,null,option); + } + + @Override + public void buildLog4Change(BusinessLogType logType, String targetId,String targetCode,String targetName,String targetRelateId, Object orgVal, Object newVal) { + BusinessLogOption option = BusinessLogOption.UPDATE; + this.baseBuildLog(logType,targetId,targetCode,targetName,targetRelateId,orgVal,newVal,option); + } + + @Override + public void baseBuildLog(BusinessLogType logType, String targetId,String targetCode,String targetName, String targetRelateId,Object orgVal, Object newVal, BusinessLogOption option) { + try { + List diffFieldValList = BusinessDifferenceUtil.getDifferenceList(orgVal,newVal); + if(option.equals(BusinessLogOption.UPDATE)&&diffFieldValList.size()<1){ + return; + } + SysBusinessLog businessLog = new SysBusinessLog(); + SysUser sysUser = sysUserMapper.selectById(AuthContextUtils.getSysUserId()); + businessLog.setUserId(sysUser.getId()); + businessLog.setUserCode(sysUser.getCode()); + businessLog.setUserName(sysUser.getName()); + businessLog.setTargetType(logType.getLabel()); + businessLog.setTargetId(targetId); + businessLog.setOptType(option.getLabel()); + if(orgVal!=null){ + businessLog.setOrgJson(JsonUtil.objectToJson(orgVal)); + } + if(newVal!=null){ + businessLog.setNewJson(JsonUtil.objectToJson(newVal)); + } + businessLog.setDiffJson(JsonUtil.objectToJson(diffFieldValList)); + businessLog.setTargetCode(targetCode); + businessLog.setTargetName(targetName); + businessLog.setTargetRelateId(targetRelateId); + this.save(businessLog); + } catch (Exception e) { + e.printStackTrace(); + } + } +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityChannelPoint.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityChannelPoint.java index 79270a2d..93aa24ab 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityChannelPoint.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityChannelPoint.java @@ -9,6 +9,10 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import lombok.Data; import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; @@ -78,12 +82,16 @@ public class TbsActivityChannelPoint implements Serializable { /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** 最后更新时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime;