oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnOperationLog.java
New file @@ -0,0 +1,63 @@ package com.oying.modules.sh.domain; import lombok.Data; import cn.hutool.core.bean.BeanUtil; import io.swagger.annotations.ApiModelProperty; import cn.hutool.core.bean.copier.CopyOptions; import java.sql.Timestamp; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; /** * @description / * @author lixin * @date 2025-07-02 **/ @Data @TableName("sh_order_return_operation_log") public class OrderReturnOperationLog implements Serializable { @TableId(value = "log_id", type = IdType.AUTO) @ApiModelProperty(value = "主键") private Long logId; @NotBlank @ApiModelProperty(value = "订单号") private String returnNum; @NotBlank @ApiModelProperty(value = "用户账号") private String username; @NotBlank @ApiModelProperty(value = "用户类型(骑手、消费者、商家、平台)") private String userType; @NotNull @ApiModelProperty(value = "用户操作") private Integer operation; @NotBlank @ApiModelProperty(value = "用户操作描述") private String operationDescribe; @NotBlank @ApiModelProperty(value = "备注") private String remark; @NotNull @ApiModelProperty(value = "操作时的订单快照") private String snapshotData; @NotNull @ApiModelProperty(value = "操作时间") private Timestamp operationTime; public void copy(OrderReturnOperationLog source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } } oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderOperationLogQueryCriteria.java
@@ -18,8 +18,8 @@ @ApiModelProperty(value = "每页数据量", example = "10") private Integer size = 10; @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "用户账号") private String username; @ApiModelProperty(value = "用户类型") private String userType; oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnOperationLogQueryCriteria.java
New file @@ -0,0 +1,30 @@ package com.oying.modules.sh.domain.dto; import lombok.Data; import java.sql.Timestamp; import java.util.List; import io.swagger.annotations.ApiModelProperty; /** * @author lixin * @date 2025-07-02 **/ @Data public class OrderReturnOperationLogQueryCriteria{ @ApiModelProperty(value = "页码", example = "1") private Integer page = 1; @ApiModelProperty(value = "每页数据量", example = "10") private Integer size = 10; @ApiModelProperty(value = "订单号") private String returnNum; @ApiModelProperty(value = "用户账号") private String username; @ApiModelProperty(value = "用户类型(骑手、消费者、商家、平台)") private String userType; private List<Timestamp> operationTime; } oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnOperationLogMapper.java
New file @@ -0,0 +1,22 @@ package com.oying.modules.sh.mapper; import com.oying.modules.sh.domain.OrderReturnOperationLog; import com.oying.modules.sh.domain.dto.OrderReturnOperationLogQueryCriteria; import java.util.List; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * @author lixin * @date 2025-07-02 **/ @Mapper public interface OrderReturnOperationLogMapper extends BaseMapper<OrderReturnOperationLog> { IPage<OrderReturnOperationLog> findAll(@Param("criteria") OrderReturnOperationLogQueryCriteria criteria, Page<Object> page); List<OrderReturnOperationLog> findAll(@Param("criteria") OrderReturnOperationLogQueryCriteria criteria); } oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnOperationLogController.java
New file @@ -0,0 +1,54 @@ package com.oying.modules.sh.rest; import com.oying.annotation.Log; import com.oying.modules.sh.domain.OrderReturnOperationLog; import com.oying.modules.sh.service.OrderReturnOperationLogService; import com.oying.modules.sh.domain.dto.OrderReturnOperationLogQueryCriteria; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.oying.utils.PageResult; /** * @author lixin * @date 2025-07-02 **/ @RestController @RequiredArgsConstructor @Api(tags = "退订用户操作管理") @RequestMapping("/api/orderReturnOperationLog") public class OrderReturnOperationLogController { private final OrderReturnOperationLogService orderReturnOperationLogService; @ApiOperation("导出数据") @GetMapping(value = "/download") @PreAuthorize("@el.check('orderReturnOperationLog:list')") public void exportOrderReturnOperationLog(HttpServletResponse response, OrderReturnOperationLogQueryCriteria criteria) throws IOException { orderReturnOperationLogService.download(orderReturnOperationLogService.queryAll(criteria), response); } @GetMapping @ApiOperation("查询退订用户操作管理") @PreAuthorize("@el.check('orderReturnOperationLog:list')") public ResponseEntity<PageResult<OrderReturnOperationLog>> queryOrderReturnOperationLog(OrderReturnOperationLogQueryCriteria criteria){ Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize()); return new ResponseEntity<>(orderReturnOperationLogService.queryAll(criteria,page),HttpStatus.OK); } @PostMapping @Log("新增退订用户操作管理") @ApiOperation("新增退订用户操作管理") @PreAuthorize("@el.check('orderReturnOperationLog:add')") public ResponseEntity<Object> createOrderReturnOperationLog(@Validated @RequestBody OrderReturnOperationLog resources){ orderReturnOperationLogService.create(resources); return new ResponseEntity<>(HttpStatus.CREATED); } } oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnOperationLogService.java
New file @@ -0,0 +1,59 @@ package com.oying.modules.sh.service; import com.oying.modules.sh.domain.OrderReturnOperationLog; import com.oying.modules.sh.domain.dto.OrderReturnOperationLogQueryCriteria; import java.util.List; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.oying.utils.PageResult; /** * @description 服务接口 * @author lixin * @date 2025-07-02 **/ public interface OrderReturnOperationLogService extends IService<OrderReturnOperationLog> { /** * 查询数据分页 * @param criteria 条件 * @param page 分页参数 * @return PageResult */ PageResult<OrderReturnOperationLog> queryAll(OrderReturnOperationLogQueryCriteria criteria, Page<Object> page); /** * 查询所有数据不分页 * @param criteria 条件参数 * @return List<OrderReturnOperationLogDto> */ List<OrderReturnOperationLog> queryAll(OrderReturnOperationLogQueryCriteria criteria); /** * 创建 * @param resources / */ void create(OrderReturnOperationLog resources); /** * 编辑 * @param resources / */ void update(OrderReturnOperationLog resources); /** * 多选删除 * @param ids / */ void deleteAll(List<Long> ids); /** * 导出数据 * @param all 待导出的数据 * @param response / * @throws IOException / */ void download(List<OrderReturnOperationLog> all, HttpServletResponse response) throws IOException; } oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnOperationLogServiceImpl.java
New file @@ -0,0 +1,80 @@ package com.oying.modules.sh.service.impl; import com.oying.modules.sh.domain.OrderReturnOperationLog; import com.oying.utils.FileUtil; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.oying.modules.sh.service.OrderReturnOperationLogService; import com.oying.modules.sh.domain.dto.OrderReturnOperationLogQueryCriteria; import com.oying.modules.sh.mapper.OrderReturnOperationLogMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.oying.utils.PageUtil; import java.util.List; import java.util.Map; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.LinkedHashMap; import com.oying.utils.PageResult; /** * @description 服务实现 * @author lixin * @date 2025-07-02 **/ @Service @RequiredArgsConstructor public class OrderReturnOperationLogServiceImpl extends ServiceImpl<OrderReturnOperationLogMapper, OrderReturnOperationLog> implements OrderReturnOperationLogService { private final OrderReturnOperationLogMapper orderReturnOperationLogMapper; @Override public PageResult<OrderReturnOperationLog> queryAll(OrderReturnOperationLogQueryCriteria criteria, Page<Object> page){ return PageUtil.toPage(orderReturnOperationLogMapper.findAll(criteria, page)); } @Override public List<OrderReturnOperationLog> queryAll(OrderReturnOperationLogQueryCriteria criteria){ return orderReturnOperationLogMapper.findAll(criteria); } @Override @Transactional(rollbackFor = Exception.class) public void create(OrderReturnOperationLog resources) { orderReturnOperationLogMapper.insert(resources); } @Override @Transactional(rollbackFor = Exception.class) public void update(OrderReturnOperationLog resources) { OrderReturnOperationLog orderReturnOperationLog = getById(resources.getLogId()); orderReturnOperationLog.copy(resources); orderReturnOperationLogMapper.updateById(orderReturnOperationLog); } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List<Long> ids) { orderReturnOperationLogMapper.deleteBatchIds(ids); } @Override public void download(List<OrderReturnOperationLog> all, HttpServletResponse response) throws IOException { List<Map<String, Object>> list = new ArrayList<>(); for (OrderReturnOperationLog orderReturnOperationLog : all) { Map<String, Object> map = new LinkedHashMap<>(); map.put("订单号", orderReturnOperationLog.getReturnNum()); map.put("用户账号", orderReturnOperationLog.getUsername()); map.put("用户类型(骑手、消费者、商家、平台)", orderReturnOperationLog.getUserType()); map.put("用户操作", orderReturnOperationLog.getOperation()); map.put("用户操作描述", orderReturnOperationLog.getOperationDescribe()); map.put("备注", orderReturnOperationLog.getRemark()); map.put("操作时的订单快照", orderReturnOperationLog.getSnapshotData()); map.put("操作时间", orderReturnOperationLog.getOperationTime()); list.add(map); } FileUtil.downloadExcel(list, response); } } oying-system/src/main/resources/mapper/sh/OrderOperationLogMapper.xml
@@ -22,8 +22,8 @@ <include refid="Base_Column_List"/> from sh_order_operation_log <where> <if test="criteria.userId != null"> and user_id = #{criteria.userId} <if test="criteria.username != null"> and username like concat('%',#{criteria.username},'%') </if> <if test="criteria.userType != null"> and user_type = #{criteria.userType} oying-system/src/main/resources/mapper/sh/OrderReturnOperationLogMapper.xml
New file @@ -0,0 +1,40 @@ <?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.oying.modules.sh.mapper.OrderReturnOperationLogMapper"> <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderReturnOperationLog"> <id column="log_id" property="logId"/> <result column="return_num" property="returnNum"/> <result column="username" property="username"/> <result column="user_type" property="userType"/> <result column="operation" property="operation"/> <result column="operation_describe" property="operationDescribe"/> <result column="remark" property="remark"/> <result column="snapshot_data" property="snapshotData"/> <result column="operation_time" property="operationTime"/> </resultMap> <sql id="Base_Column_List"> log_id, return_num, username, user_type, operation, operation_describe, remark, snapshot_data, operation_time </sql> <select id="findAll" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from sh_order_return_operation_log <where> <if test="criteria.returnNum != null"> and return_num = #{criteria.returnNum} </if> <if test="criteria.username != null"> and username like concat('%',#{criteria.username},'%') </if> <if test="criteria.userType != null"> and user_type = #{criteria.userType} </if> <if test="criteria.operationTime != null and criteria.operationTime.size() > 0"> AND operation_time BETWEEN #{criteria.operationTime[0]} AND #{criteria.operationTime[1]} </if> </where> order by log_id desc </select> </mapper>