From 2432594a4d11b47a503795349defa31872f85789 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期三, 04 十二月 2024 12:33:39 +0800 Subject: [PATCH] 操作日志 --- src/main/java/com/mzl/flower/entity/menber/Member.java | 2 src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java | 13 src/main/java/com/mzl/flower/web/flower/FlowerController.java | 51 ++ src/main/java/com/mzl/flower/mapper/flower/FlowerCategoryMapper.java | 5 src/main/java/com/mzl/flower/service/payment/OrderService.java | 4 src/main/resources/mapper/log/OperationRecordMapper.xml | 29 + src/main/java/com/mzl/flower/web/payment/SettlementController.java | 9 src/main/java/com/mzl/flower/dto/request/log/OperationRecordQueryDTO.java | 39 ++ src/main/java/com/mzl/flower/mapper/flower/FlowerTagMapper.java | 5 src/main/java/com/mzl/flower/service/flower/FlowerService.java | 6 src/main/java/com/mzl/flower/base/annotation/OperationLog.java | 23 + src/main/java/com/mzl/flower/base/ReturnDataInfoDTO.java | 20 + src/main/java/com/mzl/flower/web/flower/FlowerMarkupPlController.java | 21 + src/main/java/com/mzl/flower/dto/request/log/OperationRecordDTO.java | 24 + src/main/java/com/mzl/flower/service/log/impl/OperationRecordServiceImpl.java | 59 +++ src/main/java/com/mzl/flower/web/flower/FlowerMarkupPsController.java | 28 + src/main/java/com/mzl/flower/service/flower/FlowerMarkupPsService.java | 42 ++ src/main/java/com/mzl/flower/web/flower/FlowerCategoryController.java | 49 ++ src/main/java/com/mzl/flower/dto/response/log/OperationRecordVO.java | 39 ++ src/main/java/com/mzl/flower/entity/log/OperationRecord.java | 34 ++ src/main/java/com/mzl/flower/web/flower/FlowerParamController.java | 35 + src/main/java/com/mzl/flower/mapper/flower/FlowerZoneMapper.java | 5 src/main/java/com/mzl/flower/mapper/flower/FlowerMarkupPlMapper.java | 7 src/main/java/com/mzl/flower/mapper/flower/FlowerParamMapper.java | 4 src/main/java/com/mzl/flower/mapper/payment/OrderItemSettlementMapper.java | 3 src/main/java/com/mzl/flower/web/log/OperationRecordController.java | 40 ++ src/main/java/com/mzl/flower/mapper/log/OperationRecordMapper.java | 31 + src/main/java/com/mzl/flower/web/flower/FlowerZoneController.java | 19 + src/main/java/com/mzl/flower/mapper/payment/OrderSettlementMapper.java | 4 src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java | 3 src/main/java/com/mzl/flower/web/payment/OrderController.java | 27 + src/main/java/com/mzl/flower/service/flower/FlowerTagService.java | 3 src/main/java/com/mzl/flower/base/BaseController.java | 13 src/main/java/com/mzl/flower/mapper/flower/FlowerMapper.java | 13 src/main/java/com/mzl/flower/service/flower/FlowerParamService.java | 8 src/main/java/com/mzl/flower/mapper/flower/FlowerParamItemMapper.java | 4 src/main/java/com/mzl/flower/service/payment/OrderItemSettlementService.java | 4 src/main/java/com/mzl/flower/base/aspect/OperationLogAspect.java | 128 ++++++++ src/main/java/com/mzl/flower/service/log/OperationRecordService.java | 18 + src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java | 4 src/main/java/com/mzl/flower/web/flower/FlowerTagController.java | 19 + src/main/java/com/mzl/flower/web/payment/SalesController.java | 20 + src/main/java/com/mzl/flower/service/flower/FlowerZoneService.java | 4 src/main/java/com/mzl/flower/service/flower/FlowerMarkupPlService.java | 3 44 files changed, 862 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/mzl/flower/base/BaseController.java b/src/main/java/com/mzl/flower/base/BaseController.java index 3e521ac..34e6dd9 100644 --- a/src/main/java/com/mzl/flower/base/BaseController.java +++ b/src/main/java/com/mzl/flower/base/BaseController.java @@ -1,5 +1,7 @@ package com.mzl.flower.base; +import com.mzl.flower.config.security.SecurityUtils; +import com.mzl.flower.entity.log.OperationRecord; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,4 +18,15 @@ protected ResponseEntity<ReturnDataDTO<?>> returnData(String code, Object data) { return new ResponseEntity(new ReturnDataDTO(code, data, ""), HttpStatus.OK); } + + protected ResponseEntity<ReturnDataDTO<?>> returnData(String code, Object data, OperationRecord info) { + return new ResponseEntity(new ReturnDataInfoDTO(code, data, "",info), HttpStatus.OK); + } + + public OperationRecord getOperationRecord(String content) { + OperationRecord operationRecord = new OperationRecord(); + operationRecord.setContent(content); + operationRecord.create(SecurityUtils.getUserId()); + return operationRecord; + } } diff --git a/src/main/java/com/mzl/flower/base/ReturnDataInfoDTO.java b/src/main/java/com/mzl/flower/base/ReturnDataInfoDTO.java new file mode 100644 index 0000000..c598153 --- /dev/null +++ b/src/main/java/com/mzl/flower/base/ReturnDataInfoDTO.java @@ -0,0 +1,20 @@ +package com.mzl.flower.base; + +import com.mzl.flower.entity.log.OperationRecord; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ReturnDataInfoDTO<T> implements java.io.Serializable { + + private String code; + + private T data; + + private String msg; + + private OperationRecord info; +} diff --git a/src/main/java/com/mzl/flower/base/annotation/OperationLog.java b/src/main/java/com/mzl/flower/base/annotation/OperationLog.java new file mode 100644 index 0000000..2e9037f --- /dev/null +++ b/src/main/java/com/mzl/flower/base/annotation/OperationLog.java @@ -0,0 +1,23 @@ +package com.mzl.flower.base.annotation; + + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OperationLog { +/** + * packageName com.mzl.flower.base.annotation + * @author fanghaowei + * @version version2.0 + * @className OperationLog + * @date 2024/12/2 + * @description TODO + */ + +String value() default ""; + // 填写具体操作,默认是空 + String type() default ""; +} diff --git a/src/main/java/com/mzl/flower/base/aspect/OperationLogAspect.java b/src/main/java/com/mzl/flower/base/aspect/OperationLogAspect.java new file mode 100644 index 0000000..5e0aab8 --- /dev/null +++ b/src/main/java/com/mzl/flower/base/aspect/OperationLogAspect.java @@ -0,0 +1,128 @@ +package com.mzl.flower.base.aspect; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.mzl.flower.base.ReturnDataInfoDTO; +import com.mzl.flower.base.annotation.OperationLog; +import com.mzl.flower.entity.log.OperationRecord; +import com.mzl.flower.mapper.log.OperationRecordMapper; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Date; + +import static com.mzl.flower.utils.IpUtil.getIpAddress; + + +@Aspect +@Component +public class OperationLogAspect { + + + @Resource + private OperationRecordMapper operationRecordMapper; + + //扫描使用这个注解的方法 + @Pointcut("@annotation(com.mzl.flower.base.annotation.OperationLog)") + public void logPointCut() { + } + + @Around("logPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + Date beginTime = new Date(); + String result = null; + String status = null; + //执行代码,都加try catch,即使出错也不能影响主进程 + OperationRecord operationRecord = null; + try { + Object obj = point.proceed();//放行请求的主进程并拿到返回值 + if (obj != null) { + ResponseEntity<?> responseEntity = (ResponseEntity<?>) obj; + Object body = responseEntity.getBody(); + // 将obj转换为String类型 + String jsonResponse = JSONObject.toJSONString(body); + System.out.println(jsonResponse); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 使用 TypeReference 指定泛型类型 + ReturnDataInfoDTO<Object> returnDataInfoDTO = JSON.parseObject(jsonResponse, new TypeReference<ReturnDataInfoDTO<Object>>() {}); + // 从 ReturnDataInfoDTO 对象中获取 OperationRecord 对象 + operationRecord = (OperationRecord) returnDataInfoDTO.getInfo(); + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (attributes != null) { + HttpServletRequest request = attributes.getRequest(); + // 获取请求的IP地址 + String ip = getIpAddress(request); + operationRecord.setIpAddress(ip); + System.out.println("ip"+ip); + } +// if (attributes != null) { +// HttpServletRequest request = attributes.getRequest(); +// System.out.println(request.getRemoteAddr()); // 或者使用上面提到的方法获取真实IP地址 +// } + } + status = "success"; + return obj; + } catch (Exception e) {//请求执行出错 + result = e.getMessage(); + status = "error"; + throw e; + } finally {//无论成功失败,都保存下日志 + saveLog(point, beginTime, new Date(), result, status, operationRecord); + } + } + + //保存日志 + private void saveLog(ProceedingJoinPoint joinPoint, Date beginTime, Date endTime, String result, String status, OperationRecord operationRecord) { + if (!ObjectUtils.isEmpty(operationRecord)) { + try { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + OperationLog annotation = method.getAnnotation(OperationLog.class); + operationRecord.setStatus(status); + if (annotation != null) { + //注解上的描述 + String type = annotation.type(); +// if (!StringUtils.isEmpty(type)) { +// String recordModule = operationRecordMapper.getCodeType("OPERATION_RECORD_MODULE", type); +// operationRecord.setModule(recordModule); +// } else { + operationRecord.setModule(type); +// } + operationRecord.setFunction(annotation.value());//注解类型 + }//记录入参 +// if (joinPoint.getArgs() != null) { +// try { +// operationRecord.setContent(JSONObject.toJSONString(result)); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + //如果注解类型是1(增删改)或者是2(查询)报错,记录返回值,如果是查询正常就不记录,有可能返回值太多 + + } catch (Exception e) { + e.printStackTrace(); + } + //启动一个线程,执行报错日志,防止影响主请求 + new Thread(() -> { + try {//保存数据到数据库 + operationRecordMapper.insert(operationRecord); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + } +} diff --git a/src/main/java/com/mzl/flower/dto/request/log/OperationRecordDTO.java b/src/main/java/com/mzl/flower/dto/request/log/OperationRecordDTO.java new file mode 100644 index 0000000..dc5b56b --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/log/OperationRecordDTO.java @@ -0,0 +1,24 @@ +package com.mzl.flower.dto.request.log; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +public class OperationRecordDTO { + + @ApiModelProperty("操作模块(模块/页面)") + private String module; + + @ApiModelProperty("具体功能(动作)") + private String function; + + @ApiModelProperty("客户端IP地址") + private String ipAddress; + + @ApiModelProperty("操作内容") + private String content; + + @ApiModelProperty("用户id") + private String userId; +} diff --git a/src/main/java/com/mzl/flower/dto/request/log/OperationRecordQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/log/OperationRecordQueryDTO.java new file mode 100644 index 0000000..521d589 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/log/OperationRecordQueryDTO.java @@ -0,0 +1,39 @@ +package com.mzl.flower.dto.request.log; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mzl.flower.base.annotation.DictTrans; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +@Data +public class OperationRecordQueryDTO { + @ApiModelProperty("操作模块(模块/页面)") + @DictTrans(target = "withdrawTypeName",codeType = "OPERATION_RECORD_MODULE") + private String module; + + @ApiModelProperty("具体功能(动作)") + private String function; + + @ApiModelProperty("客户端IP地址") + private String ipAddress; + + @ApiModelProperty("操作内容") + private String content; + + @ApiModelProperty(value = "开始日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate createDateBeginStr; + + @ApiModelProperty(value = "结束日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate createDateEndStr; + + @ApiModelProperty("用户名") + private String createName; + +} diff --git a/src/main/java/com/mzl/flower/dto/response/log/OperationRecordVO.java b/src/main/java/com/mzl/flower/dto/response/log/OperationRecordVO.java new file mode 100644 index 0000000..5ebf5d9 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/response/log/OperationRecordVO.java @@ -0,0 +1,39 @@ +package com.mzl.flower.dto.response.log; + +import com.mzl.flower.base.AbstractTransDTO; +import com.mzl.flower.base.annotation.DictTrans; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class OperationRecordVO extends AbstractTransDTO { + private Long id; + + @ApiModelProperty("操作模块(模块/页面)") + @DictTrans(target = "moduleName",codeType = "OPERATION_RECORD_MODULE") + private String module; + + @ApiModelProperty("具体功能(动作)") + private String function; + + @ApiModelProperty("客户端IP地址") + private String ipAddress; + + @ApiModelProperty("操作内容") + private String content; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("操作人") + private String createName; + + @ApiModelProperty("创建日期") + private LocalDateTime createTime; + + private String moduleName; + + +} diff --git a/src/main/java/com/mzl/flower/entity/log/OperationRecord.java b/src/main/java/com/mzl/flower/entity/log/OperationRecord.java new file mode 100644 index 0000000..45773eb --- /dev/null +++ b/src/main/java/com/mzl/flower/entity/log/OperationRecord.java @@ -0,0 +1,34 @@ +package com.mzl.flower.entity.log; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.mzl.flower.base.BaseAutoEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * @author fanghaowei + * @version version2.0 + * @className OperationRecord + * @date 2024/12/02 + * @description 操作日志功能实体类 + */ +@Data +@TableName("t_operation_record") +public class OperationRecord extends BaseAutoEntity { + + @ApiModelProperty("操作模块(模块/页面)") + private String module; + + @ApiModelProperty("具体功能(动作)") + private String function; + + @ApiModelProperty("客户端IP地址") + private String ipAddress; + + @ApiModelProperty("操作内容") + private String content; + + @ApiModelProperty("状态") + private String status; +} diff --git a/src/main/java/com/mzl/flower/entity/menber/Member.java b/src/main/java/com/mzl/flower/entity/menber/Member.java index 29afe94..955fa88 100644 --- a/src/main/java/com/mzl/flower/entity/menber/Member.java +++ b/src/main/java/com/mzl/flower/entity/menber/Member.java @@ -12,7 +12,7 @@ * @version version2.0 * @className Member * @date 2024/8/26 - * @description 会员管理功能实体类 + * @description 操作日志功能实体类 */ @Data @TableName("t_member") diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerCategoryMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerCategoryMapper.java index ec0137a..751baad 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerCategoryMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerCategoryMapper.java @@ -7,6 +7,7 @@ import com.mzl.flower.dto.response.flower.FlowerCategoryTreeDTO; import com.mzl.flower.entity.flower.FlowerCategory; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.time.LocalDate; @@ -24,4 +25,8 @@ List<FlowerCategoryDailyDTO> selectHomeCategoryDaily(Page page , @Param("partnerId") Long partnerId, @Param("day") LocalDate day); + + + @Select("select * from t_flower_category where id = #{id}") + FlowerCategory selectCategoryById(Long id); } diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerMapper.java index 52e4a21..1cee2ea 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerMapper.java @@ -11,6 +11,7 @@ import com.mzl.flower.dto.response.flower.FlowerSupplierListDTO; import com.mzl.flower.entity.flower.Flower; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @@ -57,4 +58,16 @@ List<Flower> getDeletdFlowByIds(@Param("list") List<Long> ids); void updateTypeRankNull(@Param("category") Long category, @Param("level") String level); + + @Select("select * from t_flower where id = #{id}") + Flower selectFlowerById(Long id); + + @Select("<script>" + + "SELECT * FROM t_flower WHERE id IN " + + "<foreach item='id' collection='ids' open='(' separator=',' close=')'>" + + "#{id}" + + "</foreach>" + + "</script>") + List<Flower> selectFlowersByIds(@Param("ids") List<Long> ids); + } diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerMarkupPlMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerMarkupPlMapper.java index a3d2b37..ff9f412 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerMarkupPlMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerMarkupPlMapper.java @@ -1,14 +1,13 @@ package com.mzl.flower.mapper.flower; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.entity.flower.FlowerMarkupPl; -import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; - -import java.util.List; @Repository public interface FlowerMarkupPlMapper extends BaseMapper<FlowerMarkupPl> { + @Select("select * from t_flower_markup_pl where id = #{id}") + FlowerMarkupPl selectMarkupPlById(Long id); } diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerParamItemMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerParamItemMapper.java index c34e87f..3ba94c5 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerParamItemMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerParamItemMapper.java @@ -4,9 +4,13 @@ import com.mzl.flower.dto.request.flower.ParamTableColumn; import com.mzl.flower.entity.flower.FlowerParamItem; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; @Repository public interface FlowerParamItemMapper extends BaseMapper<FlowerParamItem> { void addTableColumn(@Param("tableName") String tableName, @Param("field") ParamTableColumn field); + + @Select("select * from t_flower_param_item where id = #{id}") + FlowerParamItem selectFlowerParamItemById(Long id); } diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerParamMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerParamMapper.java index 5934e34..3c74c6b 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerParamMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerParamMapper.java @@ -6,6 +6,7 @@ import com.mzl.flower.dto.response.flower.FlowerParamListDTO; import com.mzl.flower.entity.flower.FlowerParam; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @@ -24,4 +25,7 @@ , @Param("idColumn")String idColumn, @Param("idValue") Object idValue); Map getTableDataById(@Param("tableName") String tableName, @Param("id") Long id); + + @Select("select * from t_flower_param where id = #{id}") + FlowerParam selectFlowerParamById(Long id); } diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerTagMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerTagMapper.java index f11ad0d..2821516 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerTagMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerTagMapper.java @@ -6,6 +6,7 @@ import com.mzl.flower.dto.response.flower.FlowerTagDTO; import com.mzl.flower.entity.flower.FlowerTag; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @@ -13,4 +14,8 @@ @Repository public interface FlowerTagMapper extends BaseMapper<FlowerTag> { List<FlowerTagDTO> selectTagList(Page page, @Param("condition") FlowerTagQueryDTO dto); + + @Select("select * from t_flower_tag where id = #{id}") + FlowerTag selectFlowerTagById(Long id); + } diff --git a/src/main/java/com/mzl/flower/mapper/flower/FlowerZoneMapper.java b/src/main/java/com/mzl/flower/mapper/flower/FlowerZoneMapper.java index 62005d2..44baca0 100644 --- a/src/main/java/com/mzl/flower/mapper/flower/FlowerZoneMapper.java +++ b/src/main/java/com/mzl/flower/mapper/flower/FlowerZoneMapper.java @@ -2,8 +2,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mzl.flower.entity.flower.FlowerZone; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; @Repository public interface FlowerZoneMapper extends BaseMapper<FlowerZone> { + + + @Select("select * from t_flower_zone where id = #{id}") + FlowerZone selectFlowerZoneById(Long id); } diff --git a/src/main/java/com/mzl/flower/mapper/log/OperationRecordMapper.java b/src/main/java/com/mzl/flower/mapper/log/OperationRecordMapper.java new file mode 100644 index 0000000..fa6b2bf --- /dev/null +++ b/src/main/java/com/mzl/flower/mapper/log/OperationRecordMapper.java @@ -0,0 +1,31 @@ +package com.mzl.flower.mapper.log; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mzl.flower.dto.request.log.OperationRecordQueryDTO; +import com.mzl.flower.dto.response.log.OperationRecordVO; +import com.mzl.flower.entity.log.OperationRecord; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +/** + * @author fanghaowei + * @version version2.0 + * @className MemberMapper + * @date 2024/12/02 + * @description 操作日志功能mapper + */ +@SuppressWarnings("ALL") +@Repository +public interface OperationRecordMapper extends BaseMapper<OperationRecord> { + + @Select("select label from t_code_value where type_code = #{typeCode} and value = #{value} and deleted = '0' limit 1") + String getCodeType(@Param("typeCode") String typeCode,@Param("value") String value); + + List<OperationRecordVO> queryPage(@Param("dto") OperationRecordQueryDTO dto, Page page); + +} diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderItemSettlementMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderItemSettlementMapper.java index fcb91ba..3d70bd5 100644 --- a/src/main/java/com/mzl/flower/mapper/payment/OrderItemSettlementMapper.java +++ b/src/main/java/com/mzl/flower/mapper/payment/OrderItemSettlementMapper.java @@ -2,9 +2,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mzl.flower.entity.payment.OrderItemSettlement; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; @Repository public interface OrderItemSettlementMapper extends BaseMapper<OrderItemSettlement> { + @Select("select * from t_order_item_settlement where id = #{id}") + OrderItemSettlement selectOrderItemSettlementById(String id); } diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderSettlementMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderSettlementMapper.java index e77215a..add35ab 100644 --- a/src/main/java/com/mzl/flower/mapper/payment/OrderSettlementMapper.java +++ b/src/main/java/com/mzl/flower/mapper/payment/OrderSettlementMapper.java @@ -6,6 +6,7 @@ import com.mzl.flower.dto.response.payment.OrderSettlementListDTO; import com.mzl.flower.entity.payment.OrderSettlement; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.math.BigDecimal; @@ -18,4 +19,7 @@ List<OrderSettlementListDTO> selectSettlementListInfo(Page page, @Param("condition") OrderSettlementQueryDTO dto); BigDecimal getUserIncome(@Param("userId") String userId); + + @Select("select * from t_order_settlement where id = #{id}") + OrderSettlement selectOrderSettlementById(String id); } diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java b/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java index 2cbfd39..978d1b1 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerCategoryService.java @@ -236,4 +236,7 @@ categoryMapper.deleteById(id); } + public FlowerCategory selectCategoryById(Long id) { + return categoryMapper.selectCategoryById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPlService.java b/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPlService.java index 6d03e30..56b4605 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPlService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPlService.java @@ -79,4 +79,7 @@ markupPlMapper.deleteById(id); } + public FlowerMarkupPl selectMarkupPlById(Long id) { + return markupPlMapper.selectMarkupPlById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPsService.java b/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPsService.java index 0e92cf2..d5cb234 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPsService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerMarkupPsService.java @@ -7,17 +7,22 @@ import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.response.flower.*; import com.mzl.flower.entity.flower.*; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.entity.partner.Partner; import com.mzl.flower.mapper.flower.FlowerMarkupPsMapper; import com.mzl.flower.mapper.flower.FlowerMarkupPsSpCgMapper; import com.mzl.flower.mapper.flower.FlowerMarkupPsSpMapper; +import com.mzl.flower.mapper.log.OperationRecordMapper; import com.mzl.flower.service.BaseService; +import com.mzl.flower.utils.IpUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.util.List; @Slf4j @@ -33,6 +38,9 @@ @Autowired private FlowerMarkupPsSpMapper spMapper; + + @Autowired + private OperationRecordMapper operationRecordMapper; public Long saveMarkupPs(FlowerMarkupPsSaveDTO dto){ FlowerMarkupPs g = new FlowerMarkupPs(); @@ -66,7 +74,7 @@ markupCacheClient.deleteAllPsSpCg(id); } - public void saveMarkupSpCgBatch(FlowerMarkupPsSpCgBatchSaveDTO dto){ + public void saveMarkupSpCgBatch(FlowerMarkupPsSpCgBatchSaveDTO dto,HttpServletRequest request) throws IOException { List<Long> categoryIds = dto.getCategoryId(); if(categoryIds == null || categoryIds.size() == 0){ throw new ValidationException("分类列表不能为空"); @@ -77,26 +85,40 @@ cg.setCategoryId(categoryId); - saveMarkupSpCg(cg); + saveMarkupSpCg(cg,request); } } - public void saveMarkupSpCg(FlowerMarkupPsSpCgSaveDTO dto){ + public void saveMarkupSpCg(FlowerMarkupPsSpCgSaveDTO dto,HttpServletRequest request) throws IOException { Long cId = dto.getCategoryId(); FlowerMarkupPsSpCg cg = spCgMapper.selectOne(new QueryWrapper<FlowerMarkupPsSpCg>() .eq("partner_id", dto.getPartnerId()).eq("category_id", cId)); + String content = ""; + OperationRecord operationRecord = new OperationRecord(); if(cg == null){ cg = new FlowerMarkupPsSpCg(); BeanUtils.copyProperties(dto, cg); cg.setPartnerId(dto.getPartnerId()); cg.create(SecurityUtils.getUserId()); spCgMapper.insert(cg); + content = "新增商品分类加价:商品分类Id:【" + cg.getCategoryId() + "】,A级:【"+cg.getLevelA()+"】,B级:【" + cg.getLevelB() + "】,C级:【" + cg.getLevelC() + "】" + + ",D级:【"+dto.getLevelD()+"】,E级:【" + cg.getLevelE() + "】,O级:【" + cg.getLevelO() + "】"; + operationRecord.setFunction("新增商品分类加价"); } else { BeanUtils.copyProperties(dto, cg); cg.update(SecurityUtils.getUserId()); spCgMapper.updateById(cg); + content = "修改商品分类加价:id:【"+cg.getId()+"】,商品分类Id:【" + cg.getCategoryId() + "】,A级:【"+cg.getLevelA()+"】,B级:【" + cg.getLevelB() + "】,C级:【" + cg.getLevelC() + "】" + + ",D级:【"+dto.getLevelD()+"】,E级:【" + cg.getLevelE() + "】,O级:【" + cg.getLevelO() + "】"; + operationRecord.setFunction("修改商品分类加价"); } markupCacheClient.addMarkupPsSpCg(dto.getPartnerId(), cId, cg); + operationRecord.setContent(content); + operationRecord.create(SecurityUtils.getUserId()); + operationRecord.setStatus("success"); + operationRecord.setModule("markup_s_p"); + operationRecord.setIpAddress(IpUtil.getIpAddress(request)); + operationRecordMapper.insert(operationRecord); } public FlowerMarkupPsSpCgDTO getMarkupSpCg(Long partnerId, Long categoryId){ @@ -125,9 +147,11 @@ markupCacheClient.deleteMarkupPsSpCg(partnerId, categoryId); } - public void saveMarkupSp(FlowerMarkupPsSpSaveDTO dto){ + public void saveMarkupSp(FlowerMarkupPsSpSaveDTO dto,HttpServletRequest request) throws IOException { FlowerMarkupPsSp sp = spMapper.selectOne(new QueryWrapper<FlowerMarkupPsSp>() .eq("partner_id", dto.getPartnerId()).eq("flower_id", dto.getFlowerId())); + String content = ""; + OperationRecord operationRecord = new OperationRecord(); if(sp == null){ sp = new FlowerMarkupPsSp(); sp.setFlowerId(dto.getFlowerId()); @@ -135,13 +159,23 @@ sp.setPartnerId(dto.getPartnerId()); sp.create(SecurityUtils.getUserId()); spMapper.insert(sp); + content = "新增商品加价:商品id:【" + dto.getFlowerId() + "】,合伙人id:【"+dto.getPartnerId()+"】,金额:【" + dto.getFee() + "】"; + operationRecord.setFunction("新增商品分类加价"); } else { sp.setFee(dto.getFee()); sp.update(SecurityUtils.getUserId()); spMapper.updateById(sp); + content = "修改商品加价:id:【"+sp.getId()+"】,商品id:【" + dto.getFlowerId() + "】,合伙人id:【"+dto.getPartnerId()+"】,金额:【" + dto.getFee() + "】"; + } markupCacheClient.addMarkupPsSp(dto.getPartnerId(), dto.getFlowerId(), sp); + operationRecord.create(SecurityUtils.getUserId()); + operationRecord.setStatus("success"); + operationRecord.setModule("markup_s_p"); + operationRecord.setContent(content); + operationRecord.setIpAddress(IpUtil.getIpAddress(request)); + operationRecordMapper.insert(operationRecord); } public FlowerMarkupSpDTO getMarkupSp(Long partnerId, Long flowerId){ diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerParamService.java b/src/main/java/com/mzl/flower/service/flower/FlowerParamService.java index d9bf90f..1164bfd 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerParamService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerParamService.java @@ -264,4 +264,12 @@ FlowerCategory c = categoryMapper.selectById(categoryId); return c.getParamId(); } + + public FlowerParamItem selectFlowerParamItemById(Long id) { + return paramItemMapper.selectFlowerParamItemById(id); + } + + public FlowerParam selectFlowerParamById(Long id) { + return paramMapper.selectFlowerParamById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerService.java b/src/main/java/com/mzl/flower/service/flower/FlowerService.java index 1d768ba..f100b43 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerService.java @@ -910,5 +910,11 @@ } } + public Flower selectFlowerById(Long id) { + return flowerMapper.selectFlowerById(id); + } + public List<Flower> selectFlowersByIds(List<Long> ids) { + return flowerMapper.selectFlowersByIds(ids); + } } diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerTagService.java b/src/main/java/com/mzl/flower/service/flower/FlowerTagService.java index 1f40005..a92ce66 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerTagService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerTagService.java @@ -70,4 +70,7 @@ tagMapper.deleteById(id); } + public FlowerTag selectFlowerTagById(Long id) { + return tagMapper.selectFlowerTagById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerZoneService.java b/src/main/java/com/mzl/flower/service/flower/FlowerZoneService.java index d0a7d52..dc9f000 100644 --- a/src/main/java/com/mzl/flower/service/flower/FlowerZoneService.java +++ b/src/main/java/com/mzl/flower/service/flower/FlowerZoneService.java @@ -124,4 +124,8 @@ fzp.setRank(dto.getRank()); flowerZoneMapMapper.updateById(fzp); } + + public FlowerZone selectFlowerZoneById(Long id) { + return flowerZoneMapper.selectFlowerZoneById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/log/OperationRecordService.java b/src/main/java/com/mzl/flower/service/log/OperationRecordService.java new file mode 100644 index 0000000..c84e631 --- /dev/null +++ b/src/main/java/com/mzl/flower/service/log/OperationRecordService.java @@ -0,0 +1,18 @@ +package com.mzl.flower.service.log; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.mzl.flower.dto.request.log.OperationRecordDTO; +import com.mzl.flower.dto.request.log.OperationRecordQueryDTO; +import com.mzl.flower.dto.response.log.OperationRecordVO; +import com.mzl.flower.entity.log.OperationRecord; + + +public interface OperationRecordService extends IService<OperationRecord> { + + void saveOperationRecord(OperationRecordDTO operationRecordDTO); + + Page<OperationRecordVO> queryPage(OperationRecordQueryDTO operationRecordQueryDTO, Page page); + +} diff --git a/src/main/java/com/mzl/flower/service/log/impl/OperationRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/log/impl/OperationRecordServiceImpl.java new file mode 100644 index 0000000..a9572c5 --- /dev/null +++ b/src/main/java/com/mzl/flower/service/log/impl/OperationRecordServiceImpl.java @@ -0,0 +1,59 @@ +package com.mzl.flower.service.log.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mzl.flower.config.exception.ValidationException; +import com.mzl.flower.config.security.SecurityUtils; +import com.mzl.flower.constant.Constants; +import com.mzl.flower.dto.request.log.OperationRecordDTO; +import com.mzl.flower.dto.request.log.OperationRecordQueryDTO; +import com.mzl.flower.dto.request.menber.MemberDTO; +import com.mzl.flower.dto.request.menber.MemberQueryDTO; +import com.mzl.flower.dto.response.log.OperationRecordVO; +import com.mzl.flower.dto.response.member.MemberVO; +import com.mzl.flower.entity.log.OperationRecord; +import com.mzl.flower.entity.menber.Member; +import com.mzl.flower.entity.system.User; +import com.mzl.flower.mapper.customer.CustomerMapper; +import com.mzl.flower.mapper.log.OperationRecordMapper; +import com.mzl.flower.mapper.member.MemberMapper; +import com.mzl.flower.service.log.OperationRecordService; +import com.mzl.flower.service.menber.MemberService; +import com.mzl.flower.service.system.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author fanghaowei + * @version version2.0 + * @className OperationRecordServiceImpl + * @date 2024/12/2 + * @description 操作日志功能逻辑层 + */ +@Service +@Transactional +@RequiredArgsConstructor +public class OperationRecordServiceImpl extends ServiceImpl<OperationRecordMapper, OperationRecord> implements OperationRecordService { + + private final OperationRecordMapper operationRecordMapper; + + @Override + public void saveOperationRecord(OperationRecordDTO operationRecordDTO) { + + } + + @Override + public Page<OperationRecordVO> queryPage(OperationRecordQueryDTO operationRecordQueryDTO, Page page) { + List<OperationRecordVO> list = operationRecordMapper.queryPage(operationRecordQueryDTO, page); + page.setRecords(list); + return page; + } +} diff --git a/src/main/java/com/mzl/flower/service/payment/OrderItemSettlementService.java b/src/main/java/com/mzl/flower/service/payment/OrderItemSettlementService.java index 96f93ad..f594b57 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderItemSettlementService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderItemSettlementService.java @@ -260,4 +260,8 @@ return fee; } + + public OrderItemSettlement selectOrderItemSettlementById(String id) { + return orderItemSettlementMapper.selectOrderItemSettlementById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java index 69a4c85..25a7de0 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java @@ -1818,4 +1818,8 @@ orderMapper.updatePaymentCreateDate(order); }); } + + public Order getOrderInfoById(String id) { + return orderMapper.selectById(id); + } } diff --git a/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java b/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java index 8b6975f..6e65c03 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderSettlementService.java @@ -950,4 +950,8 @@ } } + + public OrderSettlement selectOrderSettlementById(String id) { + return settlementMapper.selectOrderSettlementById(id); + } } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerCategoryController.java b/src/main/java/com/mzl/flower/web/flower/FlowerCategoryController.java index e40416e..46f70a4 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerCategoryController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerCategoryController.java @@ -1,14 +1,16 @@ package com.mzl.flower.web.flower; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.dto.request.flower.FlowerCategoryCreateDTO; import com.mzl.flower.dto.request.flower.FlowerCategoryQueryDTO; import com.mzl.flower.dto.request.flower.FlowerCategoryUpdateDTO; import com.mzl.flower.dto.response.flower.FlowerCategoryDTO; import com.mzl.flower.dto.response.flower.FlowerCategoryTreeDTO; +import com.mzl.flower.entity.flower.FlowerCategory; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerCategoryService; import com.mzl.flower.service.flower.FlowerService; import io.swagger.annotations.Api; @@ -18,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -38,17 +41,33 @@ private FlowerService flowerService; @PostMapping("/tree/new") + @OperationLog(value = "新增商品分类",type = "flower_category") @ApiOperation(value = "新增商品分类") public ResponseEntity<ReturnDataDTO> addCategory(@RequestBody FlowerCategoryCreateDTO dto) { - return returnData(R.SUCCESS.getCode(), categoryService.addCategory(dto)); + String content = ""; + if (StringUtils.isEmpty(dto.getParentId())) { + content = "新增商品分类:分类名称:【" + dto.getName() + "】,等级:【" + dto.getLevelLimit() + "】"; + } else { + content = "新增商品分类:上级分类id:【" + dto.getParentId() + "】分类名称:【" + dto.getName() + "】,等级:【" + dto.getLevelLimit() + "】"; + } + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), categoryService.addCategory(dto), operationRecord); } @PostMapping("/tree/edit") + @OperationLog(value = "编辑商品分类",type = "flower_category") @ApiOperation(value = "编辑商品分类") public ResponseEntity<ReturnDataDTO> updateCategory(@RequestBody FlowerCategoryUpdateDTO dto) { Long category = categoryService.updateCategory(dto); flowerService.updateCategoryInfo(category); - return returnData(R.SUCCESS.getCode(), category); + String content = ""; + if (StringUtils.isEmpty(dto.getParentId())) { + content = "编辑商品分类:分类名称:【" + dto.getName() + "】,等级:【" + dto.getLevelLimit() + "】"; + } else { + content = "编辑商品分类:上级分类id:【" + dto.getParentId() + "】分类名称:【" + dto.getName() + "】,等级:【" + dto.getLevelLimit() + "】"; + } + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), category, operationRecord); } @GetMapping("/tree/view") @@ -73,33 +92,51 @@ } @GetMapping("/tree/delete") + @OperationLog(value = "删除商品分类",type = "flower_category") @ApiOperation(value = "删除商品分类") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品分类id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> deleteCategory(Long id){ + FlowerCategory flowerCategory = categoryService.selectCategoryById(id); categoryService.deleteCategory(id); - return returnData(R.SUCCESS.getCode(), null); + String content = ""; + if (StringUtils.isEmpty(flowerCategory.getParentId())) { + content = "删除商品分类id:【" + id + "】,分类名称:【" + flowerCategory.getName() + "】,等级:【" + flowerCategory.getLevelLimit() + "】"; + } else { + content = "删除商品分类id:【" + id + "】,上级分类id:【" + flowerCategory.getParentId() + "】,分类名称:【" + flowerCategory.getName() + "】,等级:【" + flowerCategory.getLevelLimit() + "】"; + } + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/tree/shown") + @OperationLog(value = "显示商品分类",type = "flower_category") @ApiOperation(value = "显示商品分类") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品分类id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> showCategory(Long id){ categoryService.setCategoryShown(id, true); - return returnData(R.SUCCESS.getCode(), null); + FlowerCategory flowerCategory = categoryService.selectCategoryById(id); + String content = "显示商品分类id:【" + id + "】,分类名称:【" + flowerCategory.getName() + "】,等级:【" + flowerCategory.getLevelLimit() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); + } @GetMapping("/tree/hidden") + @OperationLog(value = "隐藏商品分类",type = "flower_category") @ApiOperation(value = "隐藏商品分类") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品分类id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> hideCategory(Long id){ categoryService.setCategoryShown(id, false); - return returnData(R.SUCCESS.getCode(), null); + FlowerCategory flowerCategory = categoryService.selectCategoryById(id); + String content = "隐藏商品分类id:【" + id + "】,分类名称:【" + flowerCategory.getName() + "】,等级:【" + flowerCategory.getLevelLimit() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerController.java b/src/main/java/com/mzl/flower/web/flower/FlowerController.java index e23a700..90b581e 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerController.java @@ -4,10 +4,13 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.request.flower.FlowerTagMultipleDTO; import com.mzl.flower.dto.response.flower.*; +import com.mzl.flower.entity.flower.Flower; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerParamService; import com.mzl.flower.service.flower.FlowerService; import io.swagger.annotations.Api; @@ -68,46 +71,65 @@ @ApiOperation(value = "批量审核通过") public ResponseEntity<ReturnDataDTO> passFlowers(@RequestBody FlowerAuditMultipleDTO dto) { flowerService.auditFlowers(dto, Constants.FLOWER_STATUS.UP.name()); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量审核通过id是:【" + dto.getIds() + "】,审核意见为【" + dto.getAuditRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/list/reject/multi") + @OperationLog(value = "批量审核驳回", type = "flower_list") @ApiOperation(value = "批量审核驳回") public ResponseEntity<ReturnDataDTO> rejectFlowers(@RequestBody FlowerAuditMultipleDTO dto) { flowerService.auditFlowers(dto, Constants.FLOWER_STATUS.REJECT.name()); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量审核驳回id:【" + dto.getIds() + "】,审核意见为:【" + dto.getAuditRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/list/tags") + @OperationLog(value = "批量设置标签", type = "flower_list") @ApiOperation(value = "批量设置标签") public ResponseEntity<ReturnDataDTO> setFlowersTags(@RequestBody FlowerTagMultipleDTO dto) { flowerService.setFlowersTags(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量设置标签id:【" + dto.getIds() + "】,标签名称为:【" + dto.getTags() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/list/zones") + @OperationLog(value = "批量设置专区", type = "flower_list") @ApiOperation(value = "批量设置专区") public ResponseEntity<ReturnDataDTO> setFlowerZone(@RequestBody FlowerZoneBatchDTO dto) { flowerService.setFlowerZone(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量设置专区id:【" + dto.getIds() + "】,专区id为:【" + dto.getZoneId() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/list/off") + @OperationLog(value = "批量强制下架", type = "flower_list") @ApiOperation(value = "批量强制下架") public ResponseEntity<ReturnDataDTO> setFlowersForceOff(@RequestBody FlowerOffDTO dto) { flowerService.setFlowersForceOff(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量强制下架商品id:【" + dto.getIds() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/list/delete") @ApiOperation(value = "商品删除") + @OperationLog(value = "商品删除", type = "flower_list") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> deleteFlower(Long id) { flowerService.deleteFlower(id); - return returnData(R.SUCCESS.getCode(), null); + Flower flower = flowerService.selectFlowerById(id); + String content = "删除商品id:【" + id + "】,商品名称:【" + flower.getName() + "】,商品售价:【" + flower.getPrice() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } + @GetMapping("/params") @ApiOperation(value = "获取分类参数列表") @@ -125,17 +147,23 @@ } @PostMapping("/list/recommend/set") + @OperationLog(value = "批量设置推荐", type = "flower_list") @ApiOperation(value = "批量设置推荐") public ResponseEntity<ReturnDataDTO> setFlowerRecommend(@RequestBody FlowerRecommendMultipleDTO dto) { flowerService.setFlowerRecommend(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量设置推荐id:【" + dto.getIds() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/list/recommend/cancel") + @OperationLog(value = "批量取消推荐", type = "flower_list") @ApiOperation(value = "批量取消推荐") public ResponseEntity<ReturnDataDTO> cancelFlowerRecommend(@RequestBody FlowerRecommendMultipleDTO dto) { flowerService.cancelFlowerRecommend(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量取消推荐id:【" + dto.getIds() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @@ -168,9 +196,12 @@ } @PostMapping("/list/limiteds") - @ApiOperation(value = "批量设置标签") + @OperationLog(value = "批量设置每人限购", type = "flower_list") + @ApiOperation(value = "批量设置每人限购") public ResponseEntity<ReturnDataDTO> setFlowersLimited(@RequestBody FlowerLimitedDTO dto) { flowerService.setFlowersLimited(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "批量设置每人限购id:【" + dto.getIds() + "】,限购数量:【"+dto.getLimited()+"】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPlController.java b/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPlController.java index 1dfd731..654910d 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPlController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPlController.java @@ -4,8 +4,11 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.response.flower.FlowerMarkupPlDTO; +import com.mzl.flower.entity.flower.FlowerMarkupPl; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerMarkupPlService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -17,7 +20,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotBlank; @RestController @RequestMapping("/api/flower/markup/pl") @@ -30,19 +32,26 @@ private FlowerMarkupPlService plService; @PostMapping("/list/new") + @OperationLog(value = "新增平台区间加价", type = "markup_p_i") @ApiOperation(value = "新增平台区间加价") public ResponseEntity<ReturnDataDTO> addMarkupPl(@RequestBody FlowerMarkupPlCreateDTO dto) { Long id = plService.addMarkupPl(dto); plService.updateCache(); - return returnData(R.SUCCESS.getCode(), id); + String content = "新增平台区间加价价格区间:【" + dto.getLowerPrice() + "】~【"+dto.getUpperPrice()+"】,加价:【" + dto.getFee() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), id, operationRecord); } @PostMapping("/list/edit") + @OperationLog(value = "编辑平台区间加价", type = "markup_p_i") @ApiOperation(value = "编辑平台区间加价") public ResponseEntity<ReturnDataDTO> updateMarkupPl(@RequestBody FlowerMarkupPlUpdateDTO dto) { Long id = plService.updateMarkupPl(dto); plService.updateCache(); - return returnData(R.SUCCESS.getCode(), id); + String content = "编辑平台区间加价id:【"+dto.getId()+"】,价格区间:【" + dto.getLowerPrice() + "】~【"+dto.getUpperPrice()+"】,加价:【" + dto.getFee() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), id, operationRecord); + } @GetMapping("/list/view") @@ -61,14 +70,18 @@ } @GetMapping("/list/delete") + @OperationLog(value = "删除平台区间加价", type = "markup_p_i") @ApiOperation(value = "删除平台区间加价") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "平台区间加价id", required = true, dataType = "String", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> deleteMarkupPl(Long id){ + FlowerMarkupPl flowerMarkupPl = plService.selectMarkupPlById(id); plService.deleteMarkupPl(id); plService.updateCache(); - return returnData(R.SUCCESS.getCode(), null); + String content = "删除平台区间加价:id:【" + id + "】,价格区间:【" + flowerMarkupPl.getLowerPrice() + "】~【" + flowerMarkupPl.getUpperPrice() + "】,加价:【" + flowerMarkupPl.getFee() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPsController.java b/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPsController.java index a9a441c..48cf2cf 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPsController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerMarkupPsController.java @@ -4,8 +4,10 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.response.flower.*; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerMarkupPsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -16,6 +18,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; @RestController @RequestMapping("/api/flower/markup/ps") @@ -50,16 +55,20 @@ } @PostMapping("/spcg/list/save/batch") + @OperationLog(value = "批量新增商品分类加价", type = "markup_s_p") @ApiOperation(value = "批量新增商品分类加价") - public ResponseEntity<ReturnDataDTO> saveMarkupSpCgBatch(@RequestBody FlowerMarkupPsSpCgBatchSaveDTO dto) { - psService.saveMarkupSpCgBatch(dto); - return returnData(R.SUCCESS.getCode(), null); + public ResponseEntity<ReturnDataDTO> saveMarkupSpCgBatch(@RequestBody FlowerMarkupPsSpCgBatchSaveDTO dto, HttpServletRequest request) throws IOException { + psService.saveMarkupSpCgBatch(dto,request); + String content = "批量新增商品分类加价:商品分类Id:【" + dto.getCategoryId() + "】,A级:【"+dto.getLevelA()+"】,B级:【" + dto.getLevelB() + "】,C级:【" + dto.getLevelC() + "】" + + ",D级:【"+dto.getLevelD()+"】,E级:【" + dto.getLevelE() + "】,O级:【" + dto.getLevelO() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null,operationRecord); } @PostMapping("/spcg/list/save") @ApiOperation(value = "新增商品分类加价") - public ResponseEntity<ReturnDataDTO> saveMarkupSpCg(@RequestBody FlowerMarkupPsSpCgSaveDTO dto) { - psService.saveMarkupSpCg(dto); + public ResponseEntity<ReturnDataDTO> saveMarkupSpCg(@RequestBody FlowerMarkupPsSpCgSaveDTO dto,HttpServletRequest request) throws IOException { + psService.saveMarkupSpCg(dto,request); return returnData(R.SUCCESS.getCode(), null); } @@ -81,6 +90,7 @@ } @GetMapping("/spcg/list/delete") + @OperationLog(value = "删除商品分类加价", type = "markup_s_p") @ApiOperation(value = "删除商品分类加价") @ApiImplicitParams({ @ApiImplicitParam(name = "partnerId", value = "合伙人id", required = true, dataType = "Long", paramType = "query"), @@ -88,13 +98,15 @@ }) public ResponseEntity<ReturnDataDTO<?>> deleteMarkupSpCg(Long partnerId, Long categoryId){ psService.deleteMarkupSpCg(partnerId, categoryId); - return returnData(R.SUCCESS.getCode(), null); + String content = "删除商品分类加价:合伙人id:【" + partnerId + "】,商品分类id:【"+categoryId+"】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null,operationRecord); } @PostMapping("/sp/list/save") @ApiOperation(value = "新增商品加价") - public ResponseEntity<ReturnDataDTO> saveMarkupSp(@RequestBody FlowerMarkupPsSpSaveDTO dto) { - psService.saveMarkupSp(dto); + public ResponseEntity<ReturnDataDTO> saveMarkupSp(@RequestBody FlowerMarkupPsSpSaveDTO dto,HttpServletRequest request) throws IOException { + psService.saveMarkupSp(dto,request); return returnData(R.SUCCESS.getCode(), null); } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerParamController.java b/src/main/java/com/mzl/flower/web/flower/FlowerParamController.java index e716c7a..8317e7e 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerParamController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerParamController.java @@ -4,10 +4,14 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.response.flower.FlowerParamDTO; import com.mzl.flower.dto.response.flower.FlowerParamItemDTO; import com.mzl.flower.dto.response.flower.FlowerParamListDTO; +import com.mzl.flower.entity.flower.FlowerParam; +import com.mzl.flower.entity.flower.FlowerParamItem; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerParamService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -38,9 +42,14 @@ } @PostMapping("/list/edit") + @OperationLog(value = "编辑商品参数集", type = "flower_param") @ApiOperation(value = "编辑商品参数集") public ResponseEntity<ReturnDataDTO> updateParam(@RequestBody FlowerParamUpdateDTO dto) { - return returnData(R.SUCCESS.getCode(), paramService.updateParam(dto)); + String content = ""; + content = "编辑商品参数集id:【" + dto.getId() + "】参数模板名称:【" + dto.getName() + "】,排序:【" + dto.getSortBy() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), paramService.updateParam(dto), operationRecord); + } @GetMapping("/list/view") @@ -59,13 +68,17 @@ } @GetMapping("/list/delete") + @OperationLog(value = "删除商品参数集", type = "flower_param") @ApiOperation(value = "删除商品参数集") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品参数集id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> deleteParam(Long id){ + FlowerParam flowerParam = paramService.selectFlowerParamById(id); paramService.deleteParam(id); - return returnData(R.SUCCESS.getCode(), null); + String content = "删除商品参数集:参数id:【" + id + "】,参数模板名称【" + flowerParam.getName() + "】,排序:【" + flowerParam.getSortBy() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/list/items") @@ -87,24 +100,34 @@ } @GetMapping("/list/items/delete") + @OperationLog(value = "删除参数", type = "flower_param") @ApiOperation(value = "删除参数") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "参数id", required = true, dataType = "Long", paramType = "query") }) - public ResponseEntity<ReturnDataDTO<?>> deleteParamItem(Long id){ + public ResponseEntity<ReturnDataDTO<?>> deleteParamItem(Long id) { + FlowerParamItem flowerParamItem = paramService.selectFlowerParamItemById(id); paramService.deleteParamItem(id); - return returnData(R.SUCCESS.getCode(), null); + String content = "删除参数:参数id:【" + flowerParamItem.getParamId() + "】,参数名称【" + flowerParamItem.getName() + "】,参数值:【" + flowerParamItem.getContent() + "】,排序:【" + flowerParamItem.getSortBy() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/list/items/new") + @OperationLog(value = "新增参数", type = "flower_param") @ApiOperation(value = "新增参数") public ResponseEntity<ReturnDataDTO> addParamItem(@RequestBody FlowerParamItemCreateDTO dto) { - return returnData(R.SUCCESS.getCode(), paramService.addParamItem(dto)); + String content = "新增参数:参数id:【" + dto.getParamId() + "】,参数名称【" + dto.getName() + "】,参数值:【" + dto.getContent() + "】,排序:【" + dto.getSortBy() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), paramService.addParamItem(dto), operationRecord); } @PostMapping("/list/items/edit") + @OperationLog(value = "编辑参数", type = "flower_param") @ApiOperation(value = "编辑参数") public ResponseEntity<ReturnDataDTO> updateParamItem(@RequestBody FlowerParamItemUpdateDTO dto) { - return returnData(R.SUCCESS.getCode(), paramService.updateParamItem(dto)); + String content = "编辑参数:参数id:【" + dto.getParamId() + "】,参数名称【" + dto.getName() + "】,参数值:【" + dto.getContent() + "】,排序:【" + dto.getSortBy() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), paramService.updateParamItem(dto), operationRecord); } } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerTagController.java b/src/main/java/com/mzl/flower/web/flower/FlowerTagController.java index 3a92fa7..1c7c68f 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerTagController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerTagController.java @@ -4,10 +4,13 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.dto.request.flower.FlowerTagCreateDTO; import com.mzl.flower.dto.request.flower.FlowerTagQueryDTO; import com.mzl.flower.dto.request.flower.FlowerTagUpdateDTO; import com.mzl.flower.dto.response.flower.FlowerTagDTO; +import com.mzl.flower.entity.flower.FlowerTag; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerTagService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -33,15 +36,21 @@ private FlowerTagService tagService; @PostMapping("/list/new") + @OperationLog(value = "新增商品标签", type = "tag_list") @ApiOperation(value = "新增商品标签") public ResponseEntity<ReturnDataDTO> addTag(@RequestBody FlowerTagCreateDTO dto) { - return returnData(R.SUCCESS.getCode(), tagService.addTag(dto)); + String content = "新增商品标签标签名称:【" + dto.getName() + "】,标签说明:【" + dto.getRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), tagService.addTag(dto), operationRecord); } @PostMapping("/list/edit") + @OperationLog(value = "编辑商品标签", type = "tag_list") @ApiOperation(value = "编辑商品标签") public ResponseEntity<ReturnDataDTO> updateTag(@RequestBody FlowerTagUpdateDTO dto) { - return returnData(R.SUCCESS.getCode(), tagService.updateTag(dto)); + String content = "编辑商品标签id:【" + dto.getId() + "】标签名称:【" + dto.getName() + "】,标签说明:【" + dto.getRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), tagService.updateTag(dto), operationRecord); } @GetMapping("/list/view") @@ -60,13 +69,17 @@ } @GetMapping("/list/delete") + @OperationLog(value = "删除商品标签", type = "tag_list") @ApiOperation(value = "删除商品标签") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品标签id", required = true, dataType = "String", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> deleteTag(Long id){ + FlowerTag flowerTag = tagService.selectFlowerTagById(id); tagService.deleteTag(id); - return returnData(R.SUCCESS.getCode(), null); + String content = "删除商品标签id:【" + id + "】标签名称:【" + flowerTag.getName() + "】,标签说明:【" + flowerTag.getRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } } diff --git a/src/main/java/com/mzl/flower/web/flower/FlowerZoneController.java b/src/main/java/com/mzl/flower/web/flower/FlowerZoneController.java index 0406703..83c8709 100644 --- a/src/main/java/com/mzl/flower/web/flower/FlowerZoneController.java +++ b/src/main/java/com/mzl/flower/web/flower/FlowerZoneController.java @@ -4,11 +4,14 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.response.flower.FlowerListDTO; import com.mzl.flower.dto.response.flower.FlowerZoneDTO; +import com.mzl.flower.entity.flower.FlowerZone; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.service.flower.FlowerService; import com.mzl.flower.service.flower.FlowerZoneService; import io.swagger.annotations.Api; @@ -39,17 +42,23 @@ } @PostMapping("/page/new") + @OperationLog(value = "新增专区", type = "flower_zone") @ApiOperation(value = "新增专区") public ResponseEntity<ReturnDataDTO> addTag(@RequestBody FlowerZoneCreateDTO dto) { flowerZoneService.addZone(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "新增专区:专区标题:【" + dto.getName() + "】,专区图片:【" + dto.getBgUrl() + "】,排序:【" + dto.getSeq() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/page/edit") + @OperationLog(value = "编辑专区", type = "flower_zone") @ApiOperation(value = "编辑专区") public ResponseEntity<ReturnDataDTO> updateZone(@RequestBody FlowerZoneUpdateDTO dto) { flowerZoneService.updateZone(dto); - return returnData(R.SUCCESS.getCode(), null); + String content = "编辑专区:专区id:【"+dto.getId()+"】,专区标题:【" + dto.getName() + "】,专区图片:【" + dto.getBgUrl() + "】,排序:【" + dto.getSeq() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/page/view") @@ -68,13 +77,17 @@ } @GetMapping("/page/delete") + @OperationLog(value = "删除专区", type = "flower_zone") @ApiOperation(value = "删除专区") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "专区id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> deleteZone(@NotNull(message = "id不能为空") Long id){ + FlowerZone flowerZone = flowerZoneService.selectFlowerZoneById(id); flowerZoneService.deleteZone(id); - return returnData(R.SUCCESS.getCode(), null); + String content = "删除专区:专区id:【" + id + "】,专区标题:【" + flowerZone.getName() + "】,专区图片:【" + flowerZone.getBgUrl() + "】,排序:【" + flowerZone.getSeq() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/list") diff --git a/src/main/java/com/mzl/flower/web/log/OperationRecordController.java b/src/main/java/com/mzl/flower/web/log/OperationRecordController.java new file mode 100644 index 0000000..2dce3d9 --- /dev/null +++ b/src/main/java/com/mzl/flower/web/log/OperationRecordController.java @@ -0,0 +1,40 @@ +package com.mzl.flower.web.log; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mzl.flower.base.BaseController; +import com.mzl.flower.base.R; +import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.dto.request.log.OperationRecordQueryDTO; +import com.mzl.flower.dto.response.log.OperationRecordVO; +import com.mzl.flower.service.log.OperationRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author fanghaowei + * @version version2.0 + * @className OperationRecordController + * @date 2024/12/02 + * @description 操作日志功能开发 + */ +@Api(value = "操作日志", tags = "操作日志") +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +public class OperationRecordController extends BaseController { + + private final OperationRecordService operationRecordService; + + @GetMapping("/operationRecord/list") + @ApiOperation(value = "操作日志列表", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<Page<OperationRecordVO>>> getOperationRecordList(Page page, OperationRecordQueryDTO dto) { + return returnData(R.SUCCESS.getCode(), operationRecordService.queryPage(dto, page)); + } + +} + diff --git a/src/main/java/com/mzl/flower/web/payment/OrderController.java b/src/main/java/com/mzl/flower/web/payment/OrderController.java index 476248d..fb13881 100644 --- a/src/main/java/com/mzl/flower/web/payment/OrderController.java +++ b/src/main/java/com/mzl/flower/web/payment/OrderController.java @@ -4,11 +4,14 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.request.payment.OrderAddressUpdateDTO; import com.mzl.flower.dto.request.payment.OrderDeliveryNoDTO; import com.mzl.flower.dto.request.payment.OrderQueryDTO; import com.mzl.flower.dto.response.payment.*; +import com.mzl.flower.entity.log.OperationRecord; +import com.mzl.flower.entity.payment.Order; import com.mzl.flower.service.payment.DeliveryOrderService; import com.mzl.flower.service.payment.OrderService; import com.mzl.flower.service.payment.UserPaymentV3Service; @@ -72,10 +75,14 @@ } @PostMapping("/list/send") + @OperationLog(value = "发货", type = "order_list") @ApiOperation(value = "没有合伙人的花店上传快递号发货") public ResponseEntity<ReturnDataDTO> saveDeliveryNo(@RequestBody OrderDeliveryNoDTO dto) { orderService.saveDeliveryNo(dto); - return returnData(R.SUCCESS.getCode(), null); + Order orderInfoById = orderService.getOrderInfoById(dto.getId()); + String content = "订单发货id:【" + dto.getId() + "】,订单号:【" + orderInfoById.getOrderNo() + "】,快递号:【" + dto.getDeliveryNo() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/list/abnormal/details") @@ -88,10 +95,14 @@ } @GetMapping("/list/abnormal/process") + @OperationLog(value = "异常订单处理", type = "order_list") @ApiOperation(value = "异常订单处理(不管有没有退款金额,建议都要处理)") public ResponseEntity<ReturnDataDTO> processLevelDown(String id) throws Exception { orderService.processAbnormalOrder(id); - return returnData(R.SUCCESS.getCode(), null); + Order orderInfoById = orderService.getOrderInfoById(id); + String content = "订单退款id:【" + id + "】,订单号:【" + orderInfoById.getOrderNo() + "】操作退款,降级打款记录id:【" + orderInfoById.getTransferId() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/list/check/info/reduce") @@ -172,6 +183,7 @@ } @GetMapping(value = "/refund") + @OperationLog(value = "订单退款", type = "order_list") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "订单id", required = true, dataType = "String", paramType = "query"), }) @@ -179,14 +191,21 @@ public ResponseEntity<ReturnDataDTO> refundOrder(String id) { orderService.refundCheckAdmin(id); paymentV3Service.refundOrder(id); - return returnData(R.SUCCESS.getCode(), null); + Order orderInfoById = orderService.getOrderInfoById(id); + String content = "订单退款id:【" + id + "】,订单号:【" + orderInfoById.getOrderNo() + "】操作退款"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/page/update") + @OperationLog(value = "订单修改", type = "order_list") @ApiOperation(value = "订单修改", notes = "订单修改") public ResponseEntity<ReturnDataDTO> operationUpdate(@Validated @RequestBody OrderAddressUpdateDTO dto) { orderService.operationUpdate(dto); - return returnData(R.SUCCESS.getCode(),null); + Order orderInfoById = orderService.getOrderInfoById(dto.getId()); + String content = "订单修改id:【" + dto.getId() + "】,订单号:【" + orderInfoById.getOrderNo() + "】,地区:【" + dto.getCustomerProvince() + dto.getCustomerCity() + dto.getCustomerRegion() + "】,详细地址:【" + dto.getCustomerAddress() + "】,联系方式:【" + dto.getCustomerTel() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/list/export") diff --git a/src/main/java/com/mzl/flower/web/payment/SalesController.java b/src/main/java/com/mzl/flower/web/payment/SalesController.java index 597b9ad..aef4468 100644 --- a/src/main/java/com/mzl/flower/web/payment/SalesController.java +++ b/src/main/java/com/mzl/flower/web/payment/SalesController.java @@ -4,12 +4,15 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.constant.Constants; -import com.mzl.flower.dto.request.payment.*; +import com.mzl.flower.dto.request.payment.OrderItemSalesAuditDTO; +import com.mzl.flower.dto.request.payment.OrderItemSalesQueryDTO; import com.mzl.flower.dto.response.payment.OrderItemSalesNewDTO; import com.mzl.flower.dto.response.payment.OrderItemSalesNewListDTO; import com.mzl.flower.dto.response.payment.OrderStatusCountDTO; +import com.mzl.flower.entity.log.OperationRecord; import com.mzl.flower.entity.payment.OrderItem; import com.mzl.flower.service.payment.OrderItemSalesService; import com.mzl.flower.service.payment.OrderItemSettlementService; @@ -22,7 +25,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -69,17 +71,27 @@ } @PostMapping("/audit/agree") + @OperationLog(value = "审核售后单-通过", type = "sales_fee") @ApiOperation(value = "审核售后单-通过") public ResponseEntity<ReturnDataDTO> agree(@RequestBody OrderItemSalesAuditDTO dto) throws Exception { OrderItem oi = salesService.doAudit(dto, Constants.ORDER_SALES_STATUS.AGREED.name()); orderItemSettlementService.saveItemSettlementInfo(oi, SecurityUtils.getUserId(), Constants.S_TYPE.SALES); - return returnData(R.SUCCESS.getCode(), null); +// OrderItemSettlement orderItemSettlement = orderItemSettlementService.selectOrderItemSettlementById(dto.getId()); + String content = "审核售后单-通过id:【" + dto.getId() + "】,供应商(元):【" + dto.getFeeSupplier() + "】,平台(元):【" + dto.getFeePlatform() + "】" + ",合伙人(元):【" + dto.getFeePartner() + "】" + + ",打包(元):【" + dto.getFeePlatformPack() + "】,质检(元):【" + dto.getFeePlatformCheck() + "】,物流(元):【" + dto.getFeePlatformTransport() + "】" + "" + + ",打包运费(元)(散户):【" + dto.getFeePackingTransport() + "】,平台回复:【" + dto.getRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @PostMapping("/audit/reject") + @OperationLog(value = "审核售后单-拒绝", type = "sales_fee") @ApiOperation(value = "审核售后单-拒绝") public ResponseEntity<ReturnDataDTO> reject(@RequestBody OrderItemSalesAuditDTO dto) throws Exception { +// OrderItemSettlement orderItemSettlement = orderItemSettlementService.selectOrderItemSettlementById(dto.getId()); salesService.doAudit(dto, Constants.ORDER_SALES_STATUS.REJECTED.name()); - return returnData(R.SUCCESS.getCode(), null); + String content = "审核售后单-拒绝id:【" + dto.getId() + "】,平台回复:【" + dto.getRemarks() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } } diff --git a/src/main/java/com/mzl/flower/web/payment/SettlementController.java b/src/main/java/com/mzl/flower/web/payment/SettlementController.java index 196d9f3..05ab24c 100644 --- a/src/main/java/com/mzl/flower/web/payment/SettlementController.java +++ b/src/main/java/com/mzl/flower/web/payment/SettlementController.java @@ -4,9 +4,12 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.dto.request.payment.OrderSettlementQueryDTO; import com.mzl.flower.dto.response.payment.OrderSettlementDTO; import com.mzl.flower.dto.response.payment.OrderSettlementListDTO; +import com.mzl.flower.entity.log.OperationRecord; +import com.mzl.flower.entity.payment.OrderSettlement; import com.mzl.flower.schedule.ScheduleService; import com.mzl.flower.service.payment.OrderSettlementService; import io.swagger.annotations.Api; @@ -60,13 +63,17 @@ } @GetMapping("/list/transfer") + @OperationLog(value = "结算转账", type = "settlement_list") @ApiOperation(value = "结算转账") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "结算id", required = true, dataType = "String", paramType = "query") }) public ResponseEntity<ReturnDataDTO<?>> doSettlementTransfer(String id){ settlementService.doSettlementTransfer(id); - return returnData(R.SUCCESS.getCode(), null); + OrderSettlement settlement = settlementService.selectOrderSettlementById(id); + String content = "结算转账:id:【" + id + "】,用户id【" + settlement.getUserId() + "】,结算金额:【" + settlement.getSettlementAmount() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/do") diff --git a/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java b/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java index f4aff8b..1ef776d 100644 --- a/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java +++ b/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java @@ -5,12 +5,16 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.base.annotation.OperationLog; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.dto.request.comment.*; import com.mzl.flower.dto.response.comment.FlowerCommentVO; import com.mzl.flower.dto.response.coupon.CouponTemplatePointVO; import com.mzl.flower.dto.response.coupon.CouponTemplateVO; +import com.mzl.flower.entity.log.OperationRecord; +import com.mzl.flower.entity.payment.Order; import com.mzl.flower.service.comment.FlowerCommentService; +import com.mzl.flower.service.payment.OrderService; import com.mzl.flower.utils.ConverterUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -35,6 +39,9 @@ @Autowired private FlowerCommentService flowerCommentService; + + @Autowired + private OrderService orderService; @PostMapping("") @ApiOperation(value = "新增", notes = "新增") @@ -70,6 +77,7 @@ } @DeleteMapping("/{id}") + @OperationLog(value = "评价删除",type = "flower_comment") @ApiOperation(value = "删除", notes = "删除") public ResponseEntity<ReturnDataDTO> delete(@PathVariable String id) { @@ -78,7 +86,10 @@ throw new ValidationException("评论不存在"); } flowerCommentService.deleteFlowerComment(id); - return returnData(R.SUCCESS.getCode(), null); + Order order = orderService.getOrderInfoById(flowerCommentDO.getOrderId()); + String content = "评价删除id:【" + id + "】,订单编号【" + order.getOrderNo() + "】,供应商id:【" + flowerCommentDO.getSupplierId() + "】,评价内容:【" + flowerCommentDO.getComment() + "】"; + OperationRecord operationRecord = getOperationRecord(content); + return returnData(R.SUCCESS.getCode(), null, operationRecord); } @GetMapping("/{id}") diff --git a/src/main/resources/mapper/log/OperationRecordMapper.xml b/src/main/resources/mapper/log/OperationRecordMapper.xml new file mode 100644 index 0000000..f8e16b5 --- /dev/null +++ b/src/main/resources/mapper/log/OperationRecordMapper.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > +<mapper namespace="com.mzl.flower.mapper.log.OperationRecordMapper"> + + <select id="queryPage" resultType="com.mzl.flower.dto.response.log.OperationRecordVO"> + select t.* , u.nick_name createName from t_operation_record t + LEFT JOIN t_user u ON t.create_by = u.id + where t.deleted= 0 + <if test="dto.createName != null and dto.createName != ''"> + and u.nick_name like concat('%', #{dto.createName}, '%') + </if> + <if test="dto.module != null and dto.module != ''"> + and t.module = #{dto.module} + </if> + <if test="dto.function != null and dto.function != ''"> + and t.function like concat('%', #{dto.function}, '%') + </if> + <if test="dto.content != null and dto.content != ''"> + and t.content like concat('%', #{dto.content}, '%') + </if> + <if test="dto.createDateBeginStr!=null "> + AND DATE_FORMAT(t.create_time, '%Y-%m-%d') >= #{dto.createDateBeginStr} + </if> + <if test="dto.createDateEndStr!=null "> + AND DATE_FORMAT(t.create_time, '%Y-%m-%d') <= #{dto.createDateEndStr} + </if> + order by t.create_time desc + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.3