zhaoyun 3 週間 前
コミット
f03ef036f2
45 ファイル変更3235 行追加77 行削除
  1. 88 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/SecondHandRefundOrderController.java
  2. 82 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/SecondhandOrderController.java
  3. 11 1
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/publicly/PayCallbackController.java
  4. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/CommunityConstants.java
  5. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/PayConstants.java
  6. 118 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/game/GameNotes.java
  7. 57 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/game/GameNotesRelation.java
  8. 0 6
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/secondhand/SecondHandRefundOrderInfo.java
  9. 1 1
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderAfterSalesSearchRequest.java
  10. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderSearchRequest.java
  11. 65 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/game/GameNotesSaveRequest.java
  12. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/CommunityUserHomePageResponse.java
  13. 83 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/game/GameNoteFrontDetailResponse.java
  14. 64 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/game/GameNoteFrontPageResponse.java
  15. 86 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/GameNoteController.java
  16. 11 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/PayCallbackController.java
  17. 36 5
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/SecondHandRefundOrderController.java
  18. 71 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/GameFrontService.java
  19. 22 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/SecondHandFrontOrderService.java
  20. 3 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/CommunityFrontServiceImpl.java
  21. 1 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontOrderServiceImpl.java
  22. 183 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/GameFrontServiceImpl.java
  23. 25 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/SecondHandFrontOrderServiceImpl.java
  24. 0 6
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/SecondHandOrderDetailDao.java
  25. 25 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/game/GameNotesDao.java
  26. 17 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/game/GameNotesRelationDao.java
  27. 2 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/secondhand/SecondHandRefundOrderDao.java
  28. 72 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/GameNotesRelationService.java
  29. 180 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/GameNotesService.java
  30. 7 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/PayCallbackService.java
  31. 41 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/SecondHandOrderService.java
  32. 8 3
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/SecondHandRefundOrderManagerService.java
  33. 6 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/SecondHandRefundOrderService.java
  34. 156 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/GameNotesRelationServiceImpl.java
  35. 689 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/GameNotesServiceImpl.java
  36. 52 0
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/PayCallbackServiceImpl.java
  37. 1 8
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandOrderDetailService.java
  38. 1 13
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandOrderDetailServiceImpl.java
  39. 226 1
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandOrderServiceImpl.java
  40. 40 29
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandRefundOrderManagerServiceImpl.java
  41. 11 4
      ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandRefundOrderServiceImpl.java
  42. 40 0
      ydd_mer_java/crmeb-service/src/main/resources/mapper/secondhand/SecondHandOrderDetailMapper.xml
  43. 441 0
      ydd_mer_java/crmeb-service/src/main/resources/mapper/secondhand/SecondHandOrderMapper.xml
  44. 199 0
      ydd_mer_java/crmeb-service/src/main/resources/mapper/secondhand/SecondHandRefundOrderMapper.xml
  45. 4 0
      ydd_mer_java/replay_pid17280.log

+ 88 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/SecondHandRefundOrderController.java

@@ -0,0 +1,88 @@
+package com.zbkj.admin.controller.platform;
+
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.RefundOrderRemarkRequest;
+import com.zbkj.common.request.RefundOrderSearchRequest;
+import com.zbkj.common.response.PlatformRefundOrderPageResponse;
+import com.zbkj.common.response.RefundOrderAdminDetailResponse;
+import com.zbkj.common.response.RefundOrderCountItemResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.service.service.RefundOrderService;
+import com.zbkj.service.service.SecondHandRefundOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 平台端退款订单控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/platform/secondhand/refund/order")
+@Api(tags = "平台端二手交易退款订单控制器")
+public class SecondHandRefundOrderController {
+
+    @Autowired
+    private SecondHandRefundOrderService refundOrderService;
+
+    @PreAuthorize("hasAuthority('platform:refund:order:page:list')")
+    @ApiOperation(value = "平台端退款订单分页列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<CommonPage<PlatformRefundOrderPageResponse>> getList(@Validated RefundOrderSearchRequest request) {
+        return CommonResult.success(CommonPage.restPage(refundOrderService.getPlatformAdminPage(request)));
+    }
+
+    @PreAuthorize("hasAuthority('platform:refund:order:status:num')")
+    @ApiOperation(value = "平台端获取退款订单各状态数量")
+    @RequestMapping(value = "/status/num", method = RequestMethod.GET)
+    public CommonResult<RefundOrderCountItemResponse> getOrderStatusNum(@Validated RefundOrderSearchRequest request) {
+        return CommonResult.success(refundOrderService.getPlatformOrderStatusNum(request));
+    }
+
+    @PreAuthorize("hasAuthority('platform:refund:order:detail')")
+    @ApiOperation(value = "平台端退款订单详情")
+    @RequestMapping(value = "/detail/{refundOrderNo}", method = RequestMethod.GET)
+    public CommonResult<RefundOrderAdminDetailResponse> getDetail(@PathVariable(value = "refundOrderNo") String refundOrderNo) {
+        return CommonResult.success(refundOrderService.getPlatformDetail(refundOrderNo));
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "平台备注退款订单")
+    @PreAuthorize("hasAuthority('platform:refund:order:mark')")
+    @ApiOperation(value = "平台备注退款订单")
+    @RequestMapping(value = "/mark", method = RequestMethod.POST)
+    public CommonResult<String> mark(@RequestBody @Validated RefundOrderRemarkRequest request) {
+        if (refundOrderService.platformMark(request)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "平台强制退款")
+    @PreAuthorize("hasAuthority('platform:refund:order:compulsory:refund')")
+    @ApiOperation(value = "平台强制退款")
+    @RequestMapping(value = "/compulsory/refund/{refundOrderNo}", method = RequestMethod.POST)
+    public CommonResult<String> compulsoryRefund(@PathVariable(value = "refundOrderNo") String refundOrderNo) {
+        if (refundOrderService.compulsoryRefund(refundOrderNo)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
+
+
+

+ 82 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/SecondhandOrderController.java

@@ -0,0 +1,82 @@
+package com.zbkj.admin.controller.platform;
+
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.OrderSearchRequest;
+import com.zbkj.common.request.OrderTabsHeaderRequest;
+import com.zbkj.common.response.OrderCountItemResponse;
+import com.zbkj.common.response.OrderInvoiceResponse;
+import com.zbkj.common.response.PlatformOrderAdminDetailResponse;
+import com.zbkj.common.response.PlatformOrderPageResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.common.vo.LogisticsResultVo;
+import com.zbkj.service.service.OrderService;
+import com.zbkj.service.service.SecondHandOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 订单表 前端控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/platform/secondhand/order")
+@Api(tags = "平台端二手交易订单控制器") //配合swagger使用
+public class SecondhandOrderController {
+
+    @Autowired
+    private SecondHandOrderService orderService;
+
+    @PreAuthorize("hasAuthority('platform:order:page:list')")
+    @ApiOperation(value = "平台端订单分页列表") //配合swagger使用
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<CommonPage<PlatformOrderPageResponse>> getList(@Validated OrderSearchRequest request) {
+        return CommonResult.success(CommonPage.restPage(orderService.getPlatformAdminPage(request)));
+    }
+
+    @PreAuthorize("hasAuthority('platform:order:status:num')")
+    @ApiOperation(value = "平台端获取订单各状态数量")
+    @RequestMapping(value = "/status/num", method = RequestMethod.GET)
+    public CommonResult<OrderCountItemResponse> getOrderStatusNum(@Validated OrderTabsHeaderRequest request) {
+        return CommonResult.success(orderService.getPlatformOrderStatusNum(request));
+    }
+
+    @PreAuthorize("hasAuthority('platform:order:info')")
+    @ApiOperation(value = "平台端订单详情")
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    public CommonResult<PlatformOrderAdminDetailResponse> info(@RequestParam(value = "orderNo") String orderNo) {
+        return CommonResult.success(orderService.platformInfo(orderNo));
+    }
+
+    @PreAuthorize("hasAuthority('platform:order:invoice:list')")
+    @ApiOperation(value = "获取订单发货单列表")
+    @RequestMapping(value = "/{orderNo}/invoice/list", method = RequestMethod.GET)
+    public CommonResult<List<OrderInvoiceResponse>> getInvoiceList(@PathVariable(value = "orderNo") String orderNo) {
+        return CommonResult.success(orderService.getInvoiceList(orderNo));
+    }
+
+    @PreAuthorize("hasAuthority('platform:order:logistics:info')")
+    @ApiOperation(value = "订单物流详情")
+    @RequestMapping(value = "/get/{invoiceId}/logistics/info", method = RequestMethod.GET)
+    public CommonResult<LogisticsResultVo> getLogisticsInfo(@PathVariable(value = "invoiceId") Integer invoiceId) {
+        return CommonResult.success(orderService.getLogisticsInfo(invoiceId));
+    }
+}
+
+
+

+ 11 - 1
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/publicly/PayCallbackController.java

@@ -2,7 +2,6 @@ package com.zbkj.admin.controller.publicly;
 
 import com.alibaba.fastjson.JSON;
 import com.zbkj.common.annotation.CustomResponseAnnotation;
-import com.zbkj.common.result.CommonResult;
 import com.zbkj.service.service.PayCallbackService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -81,6 +80,17 @@ public class PayCallbackController {
         System.out.println("微信退款回调 response ===> " + response);
         return response;
     }
+    /**
+     * 微信退款回调
+     */
+    @ApiOperation(value = "二手交易微信退款回调")
+    @RequestMapping(value = "/secondhand/wechat/refund", method = RequestMethod.POST)
+    public String secondhandWeChatRefund(@RequestBody String request) {
+        System.out.println("二手交易微信退款回调 request ===> " + request);
+        String response = callbackService.weChatSecondHandRefund(request);
+        System.out.println("二手交易微信退款回调 response ===> " + response);
+        return response;
+    }
 }
 
 

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/CommunityConstants.java

@@ -47,6 +47,8 @@ public class CommunityConstants {
     public static final String COMMUNITY_NOTE_RELATION_LIKE = "like";
     /** 社区笔记关系-收藏 */
     public static final String COMMUNITY_NOTE_RELATION_COLLECT = "collect";
+    /** 社区笔记关系-收藏 */
+    public static final String COMMUNITY_NOTE_RELATION_JOIN = "join";
 
     /** 社区笔记审核状态-待审核 */
     public static final Integer COMMUNITY_NOTE_AUDIT_AWAIT = 0;

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/PayConstants.java

@@ -77,6 +77,9 @@ public class PayConstants {
     // 微信退款回调地址
     public static final String WX_PAY_REFUND_NOTIFY_API_URI = "/api/publicly/payment/callback/wechat/refund";
 
+    // 微信退款回调地址
+    public static final String WX_SECONDHAND_PAY_REFUND_NOTIFY_API_URI = "/api/publicly/payment/callback/secondhand/wechat/refund";
+
     // 支付宝支付回调地址
     public static final String ALI_PAY_NOTIFY_API_URI = "/api/publicly/payment/callback/alipay";
 

+ 118 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/game/GameNotes.java

@@ -0,0 +1,118 @@
+package com.zbkj.common.model.game;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 社区笔记表
+ * </p>
+ *
+ * @author HZW
+ * @since 2023-03-07
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("eb_game_notes")
+@ApiModel(value = "GameNotes对象", description = "社区笔记表")
+public class GameNotes implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("标题")
+    @TableField("title")
+    private String title;
+
+    @ApiModelProperty("笔记类型:1-图文,2-视频")
+    @TableField("`type`")
+    private Integer type;
+
+    @ApiModelProperty("封面")
+    @TableField("cover")
+    private String cover;
+
+    @ApiModelProperty("图片")
+    @TableField("image")
+    private String image;
+
+    @ApiModelProperty("视频链接")
+    @TableField("video")
+    private String video;
+
+    @ApiModelProperty("笔记正文")
+    @TableField("content")
+    private String content;
+
+    @ApiModelProperty("分类ID")
+    @TableField("category_id")
+    private Integer categoryId;
+    @ApiModelProperty("加入人数")
+    @TableField("join_num")
+    private Integer joinNum;
+
+    @ApiModelProperty("用户ID")
+    @TableField("uid")
+    private Integer uid;
+
+    @ApiModelProperty("星级排序:1-5")
+    @TableField("star")
+    private Integer star;
+
+    @ApiModelProperty("审核状态:0-待审核,1-审核通过,2-审核失败,3-平台关闭")
+    @TableField("audit_status")
+    private Integer auditStatus;
+
+    @ApiModelProperty("拒绝理由")
+    @TableField("refusal")
+    private String refusal;
+
+    @ApiModelProperty("排序")
+    @TableField("sort")
+    private Integer sort;
+
+    @ApiModelProperty("是否开启评论,1-开启,2-关闭,3-平台关闭")
+    @TableField("reply_status")
+    private Integer replyStatus;
+
+    @ApiModelProperty("是否删除,0-未删除,1-删除")
+    @TableField("is_del")
+    private Integer isDel;
+
+    @ApiModelProperty("操作时间")
+    @TableField("operate_time")
+    private Date operateTime;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间")
+    @TableField("update_time")
+    private Date updateTime;
+
+    @ApiModelProperty("标签路径")
+    @TableField(exist = false)
+    private String icon;
+    @ApiModelProperty("学校")
+    @TableField("school")
+    private String school;
+    @TableField("city")
+    private  String city;
+
+    private Integer status;
+}

+ 57 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/game/GameNotesRelation.java

@@ -0,0 +1,57 @@
+package com.zbkj.common.model.game;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 社区笔记关系表
+ * </p>
+ *
+ * @author HZW
+ * @since 2023-03-07
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName("eb_game_notes_relation")
+@ApiModel(value = "GameNotesRelation对象", description = "社区笔记关系表")
+public class GameNotesRelation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("笔记ID")
+    @TableField("note_id")
+    private Integer noteId;
+
+    @ApiModelProperty("笔记作者ID")
+    @TableField("author_id")
+    private Integer authorId;
+
+    @ApiModelProperty("用户ID")
+    @TableField("uid")
+    private Integer uid;
+
+    @ApiModelProperty("关联类型(收藏(collect)、点赞(like)、加入(join))")
+    @TableField("`type`")
+    private String type;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private Date createTime;
+
+
+}

+ 0 - 6
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/secondhand/SecondHandRefundOrderInfo.java

@@ -52,12 +52,6 @@ public class SecondHandRefundOrderInfo implements Serializable {
     @ApiModelProperty(value = "商品图片")
     private String image;
 
-    @ApiModelProperty(value = "商品规格值 ID")
-    private Integer attrValueId;
-
-    @ApiModelProperty(value = "商品sku")
-    private String sku;
-
     @ApiModelProperty(value = "商品单价")
     private BigDecimal price;
 

+ 1 - 1
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderAfterSalesSearchRequest.java

@@ -33,6 +33,6 @@ public class OrderAfterSalesSearchRequest extends PageParamRequest implements Se
     private String keywords;
 
     @ApiModelProperty(value = "列表类型:0-处理中,9-申请记录")
-    @NotNull(message = "请选择搜索类型")
+    //@NotNull(message = "请选择搜索类型")
     private Integer type;
 }

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderSearchRequest.java

@@ -46,4 +46,7 @@ public class OrderSearchRequest extends UserCommonSearchRequest implements Seria
 
     @ApiModelProperty(value = "订单类型:0-基础订单,1-秒杀订单,2-拼团订单")
     private Integer type;
+
+    @ApiModelProperty(value = "商户平台端查询值有效")
+    private Integer merName;
 }

+ 65 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/game/GameNotesSaveRequest.java

@@ -0,0 +1,65 @@
+package com.zbkj.common.request.game;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 社区笔记保存对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "GameNotesSaveRequest对象", description = "保存对象")
+public class GameNotesSaveRequest implements Serializable {
+
+    private static final long serialVersionUID = 3362714265772774491L;
+
+    @ApiModelProperty("ID, 编辑时必填")
+    private Integer id;
+
+    @ApiModelProperty("标题")
+    @Length(max = 20, message = "标题不能超过20个字符")
+    private String title;
+
+    @ApiModelProperty("笔记类型:1-图文,2-视频")
+    private Integer type;
+
+    @ApiModelProperty("封面")
+    //@NotBlank(message = "请先上传封面")
+    private String cover;
+
+    @ApiModelProperty("图片")
+    private String image;
+
+    @ApiModelProperty("视频链接")
+    private String video;
+
+    @ApiModelProperty("正文")
+    private String content;
+
+    @ApiModelProperty("分类ID")
+    @NotNull(message = "请选择分类")
+    private Integer categoryId;
+    @ApiModelProperty("城市")
+    private String city;
+    @ApiModelProperty("状态:0-关闭,1-开启")
+    private Integer status;
+
+}

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/CommunityUserHomePageResponse.java

@@ -52,5 +52,7 @@ public class CommunityUserHomePageResponse implements Serializable {
 
     @ApiModelProperty("归属学校")
     private String school;
+    @ApiModelProperty("退款售后笔数")
+    private Integer refundNum;
 
 }

+ 83 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/game/GameNoteFrontDetailResponse.java

@@ -0,0 +1,83 @@
+package com.zbkj.common.response.game;
+
+import com.zbkj.common.model.community.CommunityNotesProduct;
+import com.zbkj.common.model.community.CommunityTopic;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName CommunityNoteFrontDetailResponse
+ * @Description 社区笔记移动端详情响应对象
+ * @Author HZW
+ * @Date 2023/3/7 18:02
+ * @Version 1.0
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="GameNoteFrontDetailResponse", description="社区笔记移动端详情响应对象")
+public class GameNoteFrontDetailResponse implements Serializable {
+
+    private static final long serialVersionUID = -8121525449704982702L;
+
+    @ApiModelProperty("作者ID")
+    private Integer authorId;
+
+    @ApiModelProperty("作者头像")
+    private String authorAvatar;
+
+    @ApiModelProperty("作者昵称")
+    private String authorName;
+
+    @ApiModelProperty("作者等级图标")
+    private String authorLevelIcon;
+
+    @ApiModelProperty("笔记ID")
+    private Integer id;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("笔记类型:1-图文,2-视频")
+    private Integer type;
+
+    @ApiModelProperty("封面")
+    private String cover;
+
+    @ApiModelProperty("图片")
+    private String image;
+
+    @ApiModelProperty("视频链接")
+    private String video;
+
+    @ApiModelProperty("笔记正文")
+    private String content;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("当前人数")
+    private Integer peopleNum;
+
+    @ApiModelProperty("审核状态:0-待审核,1-审核通过,2-审核失败,3-平台关闭")
+    private Integer auditStatus;
+
+    @ApiModelProperty("拒绝理由")
+    private String refusal;
+
+    @ApiModelProperty("是否开启评论,1-开启,2-关闭,3-平台关闭")
+    private Integer replyStatus;
+
+    @ApiModelProperty("社区分类ID")
+    private Integer categoryId;
+
+    private Boolean userIsJoin;
+
+}

+ 64 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/game/GameNoteFrontPageResponse.java

@@ -0,0 +1,64 @@
+package com.zbkj.common.response.game;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName CommunityNoteFrontPageResponse
+ * @Description 社区笔记移动端分页数据响应对象
+ * @Author HZW
+ * @Date 2023/3/7 18:02
+ * @Version 1.0
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="GameNoteFrontPageResponse对象", description="社区笔记移动端分页数据响应对象")
+public class GameNoteFrontPageResponse implements Serializable {
+
+    private static final long serialVersionUID = -8121525449704982702L;
+
+    @ApiModelProperty("笔记ID")
+    private Integer id;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("作者昵称")
+    private String authorName;
+
+    @ApiModelProperty("作者头像")
+    private String authorAvatar;
+
+    @ApiModelProperty("作者ID")
+    private Integer authorId;
+
+    @ApiModelProperty("笔记类型:1-图文,2-视频")
+    private Integer type;
+    @ApiModelProperty("用户是否加入")
+    private Boolean userIsJoin = false;
+    @ApiModelProperty("封面")
+    private String cover;
+    @ApiModelProperty("当前人数")
+    private Integer joinNum;
+    @ApiModelProperty("审核状态:0-待审核,1-审核通过,2-审核失败,3-平台关闭")
+    private Integer auditStatus;
+    @ApiModelProperty("拒绝理由")
+    private String refusal;
+    @ApiModelProperty("笔记正文")
+    private String content;
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+    @ApiModelProperty("学校")
+    private String school;
+    @ApiModelProperty("类别")
+    private Integer categoryId;
+    @ApiModelProperty("标签图表")
+    private String icon;
+}

+ 86 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/GameNoteController.java

@@ -0,0 +1,86 @@
+package com.zbkj.front.controller;
+
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.game.GameNotesSaveRequest;
+import com.zbkj.common.response.CommunityCommentReplyResponse;
+import com.zbkj.common.response.CommunityNoteFrontDetailResponse;
+import com.zbkj.common.response.CommunityNoteFrontFollowResponse;
+import com.zbkj.common.response.CommunityNoteFrontPageResponse;
+import com.zbkj.common.response.game.GameNoteFrontDetailResponse;
+import com.zbkj.common.response.game.GameNoteFrontPageResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.front.service.CommunityFrontService;
+import com.zbkj.front.service.GameFrontService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @ClassName CommunityController
+ * @Description 社区笔记控制器
+ * @Author HZW
+ * @Date 2023/3/13 9:19
+ * @Version 1.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/front/game/note")
+@Api(tags = "游戏搭子控制器")
+public class GameNoteController {
+
+    @Autowired
+    private GameFrontService gameFrontService;
+
+    @ApiOperation(value = "游戏发现列表")
+    @RequestMapping(value = "/discover/list", method = RequestMethod.GET)
+    public CommonPage<GameNoteFrontPageResponse> findDiscoverNoteList(@ModelAttribute @Validated CommunityNoteFrontDiscoverRequest request) {
+        return CommonPage.restPage(gameFrontService.findDiscoverNoteList(request));
+    }
+    @ApiOperation(value = "加入的游戏列表")
+    @RequestMapping(value = "/join/list", method = RequestMethod.GET)
+    public CommonPage<GameNoteFrontPageResponse> findFollowNoteList(@ModelAttribute @Validated PageParamRequest request) {
+        return CommonPage.restPage(gameFrontService.findFollowNoteList(request));
+    }
+    @ApiOperation(value = "游戏详情")
+    @RequestMapping(value = "/user/detail/{noteId}", method = RequestMethod.GET)
+    public GameNoteFrontDetailResponse getUserNoteDetail(@PathVariable("noteId") Integer noteId) {
+        return gameFrontService.getUserNoteDetail(noteId);
+    }
+
+    @ApiOperation(value = "创建游戏")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public CommonResult<Object> createNote(@RequestBody @Validated GameNotesSaveRequest request) {
+        gameFrontService.createNote(request);
+        return CommonResult.success();
+    }
+
+    @ApiOperation(value = "编辑游戏")
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public CommonResult<Object> updateNote(@RequestBody @Validated GameNotesSaveRequest request) {
+        gameFrontService.updateNote(request);
+        return CommonResult.success();
+    }
+
+    @ApiOperation(value = " 我发布的游戏列表")
+    @RequestMapping(value = "/my/list", method = RequestMethod.GET)
+    public CommonPage<GameNoteFrontPageResponse> findMyNoteList(PageParamRequest request) {
+        return CommonPage.restPage(gameFrontService.findMyNoteList(request));
+    }
+
+    @ApiOperation(value = "游戏删除")
+    @RequestMapping(value = "/delete/{noteId}", method = RequestMethod.POST)
+    public CommonResult<Object> deleteNote(@PathVariable("noteId") Integer noteId) {
+        gameFrontService.deleteNote(noteId);
+        return CommonResult.success();
+    }
+    @ApiOperation(value = "游戏加入/取消")
+    @RequestMapping(value = "/join/{noteId}", method = RequestMethod.POST)
+    public CommonResult<Object> joinNote(@PathVariable("noteId") Integer noteId) {
+        gameFrontService.joinNote(noteId);
+        return CommonResult.success();
+    }
+}

+ 11 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/PayCallbackController.java

@@ -80,6 +80,17 @@ public class PayCallbackController {
         System.out.println("微信退款回调 response ===> " + response);
         return response;
     }
+    /**
+     * 微信退款回调
+     */
+    @ApiOperation(value = "二手交易微信退款回调")
+    @RequestMapping(value = "/secondhand/wechat/refund", method = RequestMethod.POST)
+    public String secondhandWeChatRefund(@RequestBody String request) {
+        System.out.println("二手交易微信退款回调 request ===> " + request);
+        String response = callbackService.weChatSecondHandRefund(request);
+        System.out.println("二手交易微信退款回调 response ===> " + response);
+        return response;
+    }
 }
 
 

+ 36 - 5
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/SecondHandRefundOrderController.java

@@ -1,12 +1,11 @@
 package com.zbkj.front.controller;
 
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
 import com.zbkj.common.model.order.OrderDetail;
 import com.zbkj.common.model.secondhand.SecondHandOrderDetail;
 import com.zbkj.common.page.CommonPage;
-import com.zbkj.common.request.CommonSearchRequest;
-import com.zbkj.common.request.OrderAfterSalesSearchRequest;
-import com.zbkj.common.request.OrderRefundApplyRequest;
-import com.zbkj.common.request.OrderRefundReturningGoodsRequest;
+import com.zbkj.common.request.*;
 import com.zbkj.common.response.RefundOrderInfoResponse;
 import com.zbkj.common.response.RefundOrderResponse;
 import com.zbkj.common.result.CommonResult;
@@ -16,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -74,7 +74,11 @@ public class SecondHandRefundOrderController {
     public CommonResult<CommonPage<RefundOrderResponse>> refundOrderList(@ModelAttribute @Validated OrderAfterSalesSearchRequest request) {
         return CommonResult.success(CommonPage.restPage(orderService.getRefundOrderList(request)));
     }
-
+    @ApiOperation(value = "我售后的订单列表")
+    @RequestMapping(value = "/my/list", method = RequestMethod.GET)
+    public CommonResult<CommonPage<RefundOrderResponse>> myRefundOrderList(@ModelAttribute @Validated OrderAfterSalesSearchRequest request) {
+        return CommonResult.success(CommonPage.restPage(orderService.getMyRefundOrderList(request)));
+    }
     @ApiOperation(value = "退款单退回商品")
     @RequestMapping(value = "/returning/goods", method = RequestMethod.POST)
     public CommonResult<Boolean> returningGoods(@RequestBody @Validated OrderRefundReturningGoodsRequest request) {
@@ -92,4 +96,31 @@ public class SecondHandRefundOrderController {
         }
         return CommonResult.failed();
     }
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "退款单收到退货")
+    @ApiOperation(value = "退款单收到退货")
+    @RequestMapping(value = "/ok/{refundOrderNo}", method = RequestMethod.POST)
+    public CommonResult<String> receiving(@PathVariable(value = "refundOrderNo") String refundOrderNo) {
+        if (orderService.receiving(refundOrderNo)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "退款单拒绝收货")
+    @ApiOperation(value = "退款单拒绝收货")
+    @RequestMapping(value = "/receiving/reject", method = RequestMethod.POST)
+    public CommonResult<String> receivingReject(@RequestBody @Validated RejectReceivingRequest request) {
+        if (orderService.receivingReject(request)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "退款单审核")
+    @ApiOperation(value = "退款单审核")
+    @RequestMapping(value = "/reject", method = RequestMethod.POST)
+    public CommonResult<String> audit(@RequestBody @Validated OrderRefundAuditRequest request) {
+        if (orderService.reject(request)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
 }

+ 71 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/GameFrontService.java

@@ -0,0 +1,71 @@
+package com.zbkj.front.service;
+
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.model.community.CommunityCategory;
+import com.zbkj.common.model.community.CommunityTopic;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.game.GameNotesSaveRequest;
+import com.zbkj.common.response.*;
+import com.zbkj.common.response.game.GameNoteFrontDetailResponse;
+import com.zbkj.common.response.game.GameNoteFrontPageResponse;
+
+import java.util.List;
+
+/**
+ * @ClassName CommunityService
+ * @Description 社区服务
+ * @Author HZW
+ * @Date 2023/3/9 14:38
+ * @Version 1.0
+ */
+public interface GameFrontService {
+    /**
+     * 社区笔记发现列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    PageInfo<GameNoteFrontPageResponse> findDiscoverNoteList(CommunityNoteFrontDiscoverRequest request);
+
+    /**
+     * 社区笔记关注列表
+     * @param request 分页参数
+     * @return PageInfo
+     */
+    PageInfo<GameNoteFrontPageResponse> findFollowNoteList(PageParamRequest request);
+
+    /**
+     * 社区用户笔记详情
+     * @param noteId 文章ID
+     */
+    GameNoteFrontDetailResponse getUserNoteDetail(Integer noteId);
+
+    /**
+     * 社区笔记点赞/取消
+     * @param noteId 笔记ID
+     */
+    void joinNote(Integer noteId);
+
+    /**
+     * 创建社区笔记
+     */
+    void createNote(GameNotesSaveRequest request);
+
+    /**
+     * 编辑社区笔记
+     */
+    void updateNote(GameNotesSaveRequest request);
+
+    /**
+     * 社区之我的笔记列表
+     */
+    PageInfo<GameNoteFrontPageResponse> findMyNoteList(PageParamRequest request);
+
+    /**
+     * 社区笔记删除
+     * @param noteId 笔记ID
+     */
+    void deleteNote(Integer noteId);
+
+
+
+}

+ 22 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/SecondHandFrontOrderService.java

@@ -123,6 +123,12 @@ public interface SecondHandFrontOrderService {
     PageInfo<RefundOrderResponse> getRefundOrderList(OrderAfterSalesSearchRequest request);
 
     /**
+     * 退款订单列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    PageInfo<RefundOrderResponse> getMyRefundOrderList(OrderAfterSalesSearchRequest request);
+    /**
      * 退款订单详情
      * @param refundOrderNo 退款订单号
      * @return RefundOrderInfoResponse
@@ -201,5 +207,21 @@ public interface SecondHandFrontOrderService {
      * @return 退款理由集合
      */
     List<String> getRefundReason();
+    /**
+     * 退款单收到退货
+     * @param refundOrderNo 退款单号
+     */
+    Boolean receiving(String refundOrderNo);
 
+    /**
+     * 退款单审核
+     * @param request 审核参数
+     * @return 审核结果
+     */
+    Boolean reject(OrderRefundAuditRequest request);
+    /**
+     * 退款单-商家拒绝收货退款
+     * @param request 拒绝收货请求对象
+     */
+    Boolean receivingReject(RejectReceivingRequest request);
 }

+ 3 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/CommunityFrontServiceImpl.java

@@ -74,6 +74,8 @@ public class CommunityFrontServiceImpl implements CommunityFrontService {
     private ArticleService articleService;
     @Autowired
     private ArticleCategoryService articleCategoryService;
+    @Autowired
+    private SecondHandRefundOrderService refundOrderService;
     @Override
     public IndexInfoResponse getIndexInfo() {
         IndexInfoResponse indexInfoResponse = new IndexInfoResponse();
@@ -444,6 +446,7 @@ public class CommunityFrontServiceImpl implements CommunityFrontService {
         response.setConcernedNum(communityAuthorConcernedService.getCountByUserId(user.getId()));
         response.setFansNum(communityAuthorConcernedService.getCountByAuthorId(user.getId()));
         response.setLikeNum(communityNotesRelationService.getCountLikeByAuthorId(user.getId()));
+        response.setRefundNum(refundOrderService.getRefundingCount(userService.getUserId()));
         return response;
     }
 

+ 1 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontOrderServiceImpl.java

@@ -168,6 +168,7 @@ public class FrontOrderServiceImpl implements FrontOrderService {
 
     @Autowired
     private RiderDeliveTimeService riderDeliveTimeService;
+
     /**
      * 预下单V1.7
      * @param request 预下单请求参数

+ 183 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/GameFrontServiceImpl.java

@@ -0,0 +1,183 @@
+package com.zbkj.front.service.impl;
+
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.constants.CommunityConstants;
+import com.zbkj.common.constants.Constants;
+import com.zbkj.common.exception.CrmebException;
+
+import com.zbkj.common.model.game.GameNotes;
+import com.zbkj.common.model.game.GameNotesRelation;
+
+import com.zbkj.common.model.user.User;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.CommunityNoteFrontDiscoverRequest;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.game.GameNotesSaveRequest;
+
+import com.zbkj.common.response.game.GameNoteFrontDetailResponse;
+import com.zbkj.common.response.game.GameNoteFrontPageResponse;
+import com.zbkj.common.result.CommonResultCode;
+import com.zbkj.common.result.CommunityResultCode;
+import com.zbkj.front.service.GameFrontService;
+import com.zbkj.service.service.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class GameFrontServiceImpl implements GameFrontService {
+    @Autowired
+    private GameNotesService gameNotesService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private GameNotesRelationService gameNotesRelationService;
+    @Override
+    public PageInfo<GameNoteFrontPageResponse> findDiscoverNoteList(CommunityNoteFrontDiscoverRequest request) {
+        PageInfo<GameNotes> pageInfo = gameNotesService.findDiscoverNoteList(request);
+        if (CollUtil.isEmpty(pageInfo.getList())) {
+            return CommonPage.copyPageInfo(pageInfo, new ArrayList<>());
+        }
+        Integer userId = userService.getUserId();
+        List<GameNoteFrontPageResponse> responseList = notesListToResponseList(pageInfo.getList(), userId);
+        return CommonPage.copyPageInfo(pageInfo, responseList);
+    }
+
+    @Override
+    public PageInfo<GameNoteFrontPageResponse> findFollowNoteList(PageParamRequest request) {
+        Integer userId = userService.getUserIdException();
+        PageInfo<GameNotes> pageInfo = gameNotesService.findFollowNoteList(request, userId);
+        if (CollUtil.isEmpty(pageInfo.getList())) {
+            return CommonPage.copyPageInfo(pageInfo, new ArrayList<>());
+        }
+        List<GameNotes> notesList = pageInfo.getList();
+        List<Integer> uidList = new ArrayList<>();
+        Map<Integer, User> userMap = userService.getUidMapList(uidList);
+        List<GameNoteFrontPageResponse> responseList = notesList.stream().map(note -> {
+            GameNoteFrontPageResponse response = new GameNoteFrontPageResponse();
+            BeanUtils.copyProperties(note, response);
+            response.setAuthorId(note.getUid());
+            response.setAuthorName(userMap.get(note.getUid()).getNickname());
+            response.setAuthorAvatar(userMap.get(note.getUid()).getAvatar());
+            response.setUserIsJoin(gameNotesRelationService.isJoinByUid(note.getId(), userId));
+            return response;
+        }).collect(Collectors.toList());
+        return CommonPage.copyPageInfo(pageInfo, responseList);
+    }
+
+    @Override
+    public GameNoteFrontDetailResponse getUserNoteDetail(Integer noteId) {
+        Integer userId = userService.getUserId();
+        GameNotes note = gameNotesService.getByIdException(noteId);
+        if (!note.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS) && !userId.equals(note.getUid())) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_NOT_EXIST);
+        }
+        User author = userService.getById(note.getUid());
+        if (ObjectUtil.isNull(author) || author.getIsLogoff()) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_AUTHOR_NOTE_EXIST);
+        }
+        GameNoteFrontDetailResponse response = new GameNoteFrontDetailResponse();
+        BeanUtils.copyProperties(note, response);
+        response.setAuthorId(author.getId());
+        response.setAuthorAvatar(author.getAvatar());
+        response.setAuthorName(author.getNickname());
+        if (userId > 0) {
+            response.setUserIsJoin(gameNotesRelationService.isJoinByUid(note.getId(), userId));
+        }
+        return response;
+    }
+
+    @Override
+    public void joinNote(Integer noteId) {
+        Integer userId = userService.getUserIdException();
+        GameNotes notes = gameNotesService.getByIdException(noteId);
+        if (!notes.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS)) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_AUDIT_STATUS_EXCEPTION);
+        }
+        GameNotesRelation relation = gameNotesRelationService.getOneByNoteIdAndUid(noteId, userId);
+        if (ObjectUtil.isNotNull(relation)) {
+            boolean remove = gameNotesRelationService.removeById(relation);
+            if (!remove) {
+                throw new CrmebException(CommonResultCode.ERROR.setMessage("游戏取消加入失败"));
+            }
+            gameNotesService.operationJoin(noteId, Constants.OPERATION_TYPE_SUBTRACT);
+            return;
+        }
+        relation = new GameNotesRelation();
+        relation.setNoteId(notes.getId());
+        relation.setAuthorId(notes.getUid());
+        relation.setType(CommunityConstants.COMMUNITY_NOTE_RELATION_JOIN);
+        relation.setUid(userId);
+        boolean save = gameNotesRelationService.save(relation);
+        if (!save) {
+            throw new CrmebException(CommonResultCode.ERROR.setMessage("游戏加入失败"));
+        }
+        gameNotesService.operationJoin(noteId, Constants.OPERATION_TYPE_ADD);
+    }
+
+    @Override
+    public void createNote(GameNotesSaveRequest request) {
+        gameNotesService.create(request);
+    }
+
+    @Override
+    public void updateNote(GameNotesSaveRequest request) {
+        gameNotesService.updateNote(request);
+    }
+
+    @Override
+    public PageInfo<GameNoteFrontPageResponse> findMyNoteList(PageParamRequest request) {
+        Integer userId = userService.getUserIdException();
+        PageInfo<GameNotes> pageInfo = gameNotesService.findMyNoteList(userId, request);
+        if (CollUtil.isEmpty(pageInfo.getList())) {
+            return CommonPage.copyPageInfo(pageInfo, new ArrayList<>());
+        }
+        List<GameNoteFrontPageResponse> responseList = notesListToResponseList(pageInfo.getList(), userId);
+        return CommonPage.copyPageInfo(pageInfo, responseList);
+    }
+
+    @Override
+    public void deleteNote(Integer noteId) {
+        Integer userId = userService.getUserIdException();
+        GameNotes gameNotes = gameNotesService.getByIdException(noteId);
+        if (!userId.equals(gameNotes.getUid())) {
+            throw new CrmebException(CommonResultCode.FORBIDDEN.setMessage("不能操作非自己的资源"));
+        }
+        gameNotesService.delete(noteId);
+    }
+    private List<GameNoteFrontPageResponse> notesListToResponseList(List<GameNotes> notesList, Integer userId) {
+        List<Integer> uidList = notesList.stream().map(GameNotes::getUid).distinct().collect(Collectors.toList());
+        Map<Integer, User> userMap = userService.getUidMapList(uidList);
+        return notesList.stream().map(note -> {
+            GameNoteFrontPageResponse response = new GameNoteFrontPageResponse();
+            response.setId(note.getId());
+            response.setTitle(note.getTitle());
+            response.setType(note.getType());
+            response.setCover(note.getCover());
+            response.setAuthorId(note.getUid());
+            response.setAuthorName(userMap.get(note.getUid()).getNickname());
+            response.setAuthorAvatar(userMap.get(note.getUid()).getAvatar());
+            response.setContent(note.getContent());
+            response.setJoinNum(note.getJoinNum());
+            response.setCreateTime(note.getCreateTime());
+            response.setCategoryId(note.getCategoryId());
+            response.setIcon(note.getIcon());
+            response.setSchool(note.getSchool());
+            if (ObjectUtil.isNotNull(userId) && userId > 0) {
+                response.setUserIsJoin(gameNotesRelationService.isJoinByUid(note.getId(), userId));
+            }
+            if (ObjectUtil.isNotNull(note.getAuditStatus())) {
+                response.setAuditStatus(note.getAuditStatus());
+            }
+            return response;
+        }).collect(Collectors.toList());
+    }
+}

+ 25 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/SecondHandFrontOrderServiceImpl.java

@@ -600,6 +600,21 @@ public class SecondHandFrontOrderServiceImpl implements SecondHandFrontOrderServ
         return Arrays.asList(reasonString.split("\\n"));
     }
 
+    @Override
+    public Boolean receiving(String refundOrderNo) {
+        return refundOrderService.receiving(refundOrderNo);
+    }
+
+    @Override
+    public Boolean reject(OrderRefundAuditRequest request) {
+        return refundOrderService.audit(request);
+    }
+
+    @Override
+    public Boolean receivingReject(RejectReceivingRequest request) {
+        return refundOrderService.receivingReject(request);
+    }
+
 
     /**
      * 移动端订单详情
@@ -800,6 +815,16 @@ public class SecondHandFrontOrderServiceImpl implements SecondHandFrontOrderServ
     public PageInfo<RefundOrderResponse> getRefundOrderList(OrderAfterSalesSearchRequest request) {
         return refundOrderService.getH5List(request);
     }
+    /**
+     * 退款订单列表
+     *
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<RefundOrderResponse> getMyRefundOrderList(OrderAfterSalesSearchRequest request) {
+        return refundOrderService.getH5MyProcessList(request);
+    }
 
     /**
      * 退款订单详情

+ 0 - 6
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/SecondHandOrderDetailDao.java

@@ -18,12 +18,6 @@ import java.util.List;
  */
 public interface SecondHandOrderDetailDao extends BaseMapper<SecondHandOrderDetail> {
 
-    /**
-     * 订单商品评论列表
-     * @param userId 用户id
-     * @param isReply 是否评价,0-未评价,1-已评价
-     */
-    List<SecondHandOrderDetail> findReplyList(@Param("userId") Integer userId, @Param("isReply") Integer isReply);
 
     /**
      * 售后申请列表(可申请售后列表)

+ 25 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/game/GameNotesDao.java

@@ -0,0 +1,25 @@
+package com.zbkj.service.dao.game;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zbkj.common.dto.CommunityNotePageDateDto;
+import com.zbkj.common.model.community.CommunityNotes;
+import com.zbkj.common.model.game.GameNotes;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 社区笔记表 Mapper 接口
+ * </p>
+ *
+ * @author HZW
+ * @since 2023-03-07
+ */
+public interface GameNotesDao extends BaseMapper<GameNotes> {
+
+    /**
+     * 社区笔记分页列表
+     */
+    List<CommunityNotePageDateDto> findPageList(Map<String, Object> map);
+}

+ 17 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/game/GameNotesRelationDao.java

@@ -0,0 +1,17 @@
+package com.zbkj.service.dao.game;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zbkj.common.model.community.CommunityNotesRelation;
+import com.zbkj.common.model.game.GameNotesRelation;
+
+/**
+ * <p>
+ * 社区笔记关系表 Mapper 接口
+ * </p>
+ *
+ * @author HZW
+ * @since 2023-03-07
+ */
+public interface GameNotesRelationDao extends BaseMapper<GameNotesRelation> {
+
+}

+ 2 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/dao/secondhand/SecondHandRefundOrderDao.java

@@ -30,6 +30,8 @@ public interface SecondHandRefundOrderDao extends BaseMapper<SecondHandRefundOrd
     RefundOrderInfoResponse getRefundOrderDetailByRefundOrderNo(@Param("refundOrderNo") String refundOrderNo);
 
     List<RefundOrderResponse> findSearchList(Map<String, Object> map);
+    List<RefundOrderResponse> findMyProcessList(Map<String, Object> map);
+
 
     List<SecondHandRefundOrder> findCanAutoRevokeOrderList(@Param("revokeTime") String revokeTime);
 

+ 72 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/GameNotesRelationService.java

@@ -0,0 +1,72 @@
+package com.zbkj.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.model.community.CommunityNotesRelation;
+import com.zbkj.common.model.game.GameNotesRelation;
+import com.zbkj.common.request.PageParamRequest;
+
+import java.util.List;
+
+/**
+* CommunityNotesRelation 接口
+* +----------------------------------------------------------------------
+* | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+* +----------------------------------------------------------------------
+* | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+* +----------------------------------------------------------------------
+* | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+* +----------------------------------------------------------------------
+* | Author: CRMEB Team <admin@crmeb.com>
+* +----------------------------------------------------------------------
+*/
+public interface GameNotesRelationService extends IService<GameNotesRelation> {
+
+    /**
+     * 用户是否点赞
+     * @param noteId 笔记ID
+     * @param userId 用户ID
+     * @return 是否点赞
+     */
+    Boolean isLikeByUid(Integer noteId, Integer userId);
+
+    /**
+     * 是否加入
+     * @param noteId
+     * @param userId
+     * @return
+     */
+    Boolean isJoinByUid(Integer noteId, Integer userId);
+    /**
+     * 获取作者获赞数
+     * @param authorId 作者ID
+     */
+    Integer getCountLikeByAuthorId(Integer authorId);
+
+    /**
+     * 获取点赞详情
+     * @param noteId 笔记ID
+     * @param userId 用户ID
+     */
+    GameNotesRelation getOneByNoteIdAndUid(Integer noteId, Integer userId);
+
+    /**
+     * 删除社区笔记关联关系
+     */
+    Boolean deleteByNoteId(Integer noteId);
+
+    /**
+     * 获取用户点赞分页列表
+     * @param userId 用户ID
+     * @param request 分页参数
+     */
+    PageInfo<GameNotesRelation> findLikePageByUid(Integer userId, PageParamRequest request);
+
+    /**
+     * 通过作者ID删除
+     * @param authorId 作责ID
+     */
+    Boolean deleteByAuthorId(Integer authorId);
+
+    List<Integer> findNotesIdList(Integer userId);
+}

+ 180 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/GameNotesService.java

@@ -0,0 +1,180 @@
+package com.zbkj.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.model.community.CommunityNotes;
+import com.zbkj.common.model.game.GameNotes;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.game.GameNotesSaveRequest;
+import com.zbkj.common.response.CommunityNoteDetailResponse;
+import com.zbkj.common.response.CommunityNotePageDateResponse;
+import com.zbkj.common.response.game.GameNoteFrontDetailResponse;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* CommunityNotes 接口
+* +----------------------------------------------------------------------
+* | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+* +----------------------------------------------------------------------
+* | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+* +----------------------------------------------------------------------
+* | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+* +----------------------------------------------------------------------
+* | Author: CRMEB Team <admin@crmeb.com>
+* +----------------------------------------------------------------------
+*/
+public interface GameNotesService extends IService<GameNotes> {
+
+    /**
+     * 是否使用社区分类
+     * @param cateId 社区分类ID
+     */
+    Boolean isUseCategory(Integer cateId);
+
+    /**
+     * 社区笔记分页列表
+     * @param request 查询参数
+     * @return PageInfo
+     */
+    PageInfo<CommunityNotePageDateResponse> findPageList(CommunityNoteSearchRequest request);
+
+    /**
+     * 社区笔记详情
+     * @param id 笔记ID
+     */
+    GameNoteFrontDetailResponse detail(Integer id);
+
+    /**
+     * 社区笔记审核
+     */
+    void audit(CommonAuditRequest request);
+
+    /**
+     * 社区笔记强制下架
+     */
+    void forcedDown(CommonForcedDownRequest request);
+
+    /**
+     * 社区笔记删除
+     * @param id 笔记ID
+     */
+    void delete(Integer id);
+
+    /**
+     * 社区笔记分类批量修改
+     */
+    void categoryBatchUpdate(CommunityNoteCategoryBatchUpdateRequest request);
+
+    /**
+     * 社区笔记推荐星级编辑
+     */
+    void updateStar(CommonStarUpdateRequest request);
+
+    /**
+     * 社区笔记评论强制关闭开关
+     * @param id 笔记ID
+     */
+    void replyForceOffSwitch(Integer id);
+
+    /**
+     * 移动端社区发现笔记分页列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    PageInfo<GameNotes> findDiscoverNoteList(CommunityNoteFrontDiscoverRequest request);
+
+    /**
+     * 移动端社区笔记关注分页列表
+     * @param request 分页参数
+     * @return PageInfo
+     */
+    PageInfo<GameNotes> findFollowNoteList(PageParamRequest request, Integer userId);
+
+    /**
+     * 获取话题关联的笔记数量
+     * @param topicId 话题ID
+     */
+    Integer getCountByTopic(Integer topicId);
+
+    /**
+     * 获取话题关联的笔记数量
+     * @param topicId 话题ID
+     */
+    Integer getFrontCountByTopic(Integer topicId);
+
+    /**
+     * 社区笔记作者列表
+     * @param authorId 作者ID
+     * @param request 分页参数
+     * @return PageInfo
+     */
+    PageInfo<GameNotes> findAuthorNoteList(Integer authorId, PageParamRequest request);
+
+    /**
+     * 获取笔记详情
+     * @param id 笔记ID
+     */
+    GameNotes getByIdException(Integer id);
+
+    /**
+     * 社区话题笔记列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    PageInfo<GameNotes> findTopicNoteList(CommunityNoteTopicSearchRequest request);
+
+    /**
+     * 创建社区笔记
+     */
+    void create(GameNotesSaveRequest request);
+
+    /**
+     * 编辑社区笔记
+     */
+    void updateNote(GameNotesSaveRequest request);
+
+    /**
+     * 社区之我的笔记列表
+     */
+    PageInfo<GameNotes> findMyNoteList(Integer userId, PageParamRequest request);
+
+
+    /**
+     * 获取新笔记通过作者
+     * @param authorId 作者ID
+     * @param num 笔记数量
+     */
+    List<GameNotes> findNewNoteByAuthorId(Integer authorId, Integer num);
+
+    /**
+     * 社区笔记点赞数量
+     * @param noteId 笔记ID
+     * @param operationType 操作类型:add-点赞,sub-取消
+     */
+    void operationJoin(Integer noteId, String operationType);
+
+    /**
+     * 操作社区笔记评论数量
+     * @param noteId 笔记ID
+     * @param num 评论数量
+     * @param operationType 操作类型
+     */
+    void operationReplyNum(Integer noteId, Integer num, String operationType);
+
+    /**
+     * 社区笔记发现推荐列表
+     * @param noteId 笔记ID
+     * @param request 分页参数
+     */
+    PageInfo<GameNotes> findDiscoverNoteRecommendList(Integer noteId, PageParamRequest request);
+
+    Map<Integer, GameNotes> getMapByIdList(List<Integer> noteIdList);
+
+    /**
+     * 删除用户所有笔记
+     * @param userId 用户ID
+     */
+    Boolean deleteByUid(Integer userId);
+}

+ 7 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/PayCallbackService.java

@@ -46,4 +46,11 @@ public interface PayCallbackService {
      * @return String
      */
     String weChatRefund(String request);
+
+    /**
+     * 二手交易退款回调
+     * @param xmlInfo
+     * @return
+     */
+    String weChatSecondHandRefund(String xmlInfo);
 }

+ 41 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/SecondHandOrderService.java

@@ -111,4 +111,45 @@ public interface SecondHandOrderService extends IService<SecondHandOrder> {
      */
     Boolean refundApply(OrderRefundApplyRequest request);
 
+
+    /**
+     * 平台端后台分页列表
+     * @param request 查询参数
+     * @return PageInfo
+     */
+    PageInfo<PlatformOrderPageResponse> getPlatformAdminPage(OrderSearchRequest request);
+
+    /**
+     * 获取平台端订单各状态数量
+     */
+    OrderCountItemResponse getPlatformOrderStatusNum(OrderTabsHeaderRequest request);
+
+    /**
+     * 订单详情(平台)
+     * @param orderNo 订单编号
+     * @return PlatformOrderAdminDetailResponse
+     */
+    PlatformOrderAdminDetailResponse platformInfo(String orderNo);
+
+    /**
+     * 获取订单发货单列表(商户端)
+     * @param orderNo 订单号
+     * @return 发货单列表
+     */
+    List<OrderInvoiceResponse> getInvoiceListByMerchant(String orderNo,SystemAdmin systemAdmin);
+
+    /**
+     * 获取订单发货单列表
+     * @param orderNo 订单号
+     * @return 发货单列表
+     */
+    List<OrderInvoiceResponse> getInvoiceList(String orderNo);
+
+    /**
+     * 获取订单快递信息
+     * @param invoiceId 发货单ID
+     * @return LogisticsResultVo
+     */
+    LogisticsResultVo getLogisticsInfo(Integer invoiceId);
+
 }

+ 8 - 3
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/SecondHandRefundOrderManagerService.java

@@ -57,7 +57,12 @@ public interface SecondHandRefundOrderManagerService extends IService<SecondHand
      * @return List
      */
     PageInfo<RefundOrderResponse> getH5List(OrderAfterSalesSearchRequest request);
-
+    /**
+     * 移动端退款订单列表
+     * @param request 搜索参数
+     * @return List
+     */
+    PageInfo<RefundOrderResponse> findMyProcessList(OrderAfterSalesSearchRequest request);
     /**
      * 退款订单详情(移动端)
      * @param refundOrderNo 退款订单号
@@ -157,13 +162,13 @@ public interface SecondHandRefundOrderManagerService extends IService<SecondHand
      * @param request 审核参数
      * @return 审核结果
      */
-    Boolean audit(OrderRefundAuditRequest request, SystemAdmin systemAdmin);
+    Boolean audit(OrderRefundAuditRequest request);
 
     /**
      * 退款单收到退货
      * @param refundOrderNo 退款单号
      */
-    Boolean receiving(String refundOrderNo, SystemAdmin systemAdmin);
+    Boolean receiving(String refundOrderNo);
 
     /**
      * 平台强制退款

+ 6 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/SecondHandRefundOrderService.java

@@ -56,7 +56,13 @@ public interface SecondHandRefundOrderService extends IService<SecondHandRefundO
      * @return List
      */
     PageInfo<RefundOrderResponse> getH5List(OrderAfterSalesSearchRequest request);
+    /**
+     * 移动端退款订单列表
+     * @param request 搜索参数
+     * @return List
+     */
 
+    PageInfo<RefundOrderResponse> getH5MyProcessList(OrderAfterSalesSearchRequest request);
     /**
      * 退款订单详情(移动端)
      * @param refundOrderNo 退款订单号

+ 156 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/GameNotesRelationServiceImpl.java

@@ -0,0 +1,156 @@
+package com.zbkj.service.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.constants.CommunityConstants;
+import com.zbkj.common.model.community.CommunityAuthorConcerned;
+import com.zbkj.common.model.community.CommunityNotesRelation;
+import com.zbkj.common.model.game.GameNotesRelation;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.service.dao.community.CommunityNotesRelationDao;
+import com.zbkj.service.dao.game.GameNotesRelationDao;
+import com.zbkj.service.service.CommunityNotesRelationService;
+import com.zbkj.service.service.GameNotesRelationService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+* CommunityNotesRelation 接口实现
+* +----------------------------------------------------------------------
+* | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+* +----------------------------------------------------------------------
+* | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+* +----------------------------------------------------------------------
+* | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+* +----------------------------------------------------------------------
+* | Author: CRMEB Team <admin@crmeb.com>
+* +----------------------------------------------------------------------
+*/
+@Service
+public class GameNotesRelationServiceImpl extends ServiceImpl<GameNotesRelationDao, GameNotesRelation> implements GameNotesRelationService {
+
+    @Resource
+    private GameNotesRelationDao dao;
+
+    /**
+     * 用户是否点赞
+     * @param noteId 笔记ID
+     * @param userId 用户ID
+     * @return 是否点赞
+     */
+    @Override
+    public Boolean isLikeByUid(Integer noteId, Integer userId) {
+        LambdaQueryWrapper<GameNotesRelation> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotesRelation::getId);
+        lqw.eq(GameNotesRelation::getNoteId, noteId);
+        lqw.eq(GameNotesRelation::getType, CommunityConstants.COMMUNITY_NOTE_RELATION_LIKE);
+        lqw.eq(GameNotesRelation::getUid, userId);
+        GameNotesRelation relation = dao.selectOne(lqw);
+        return ObjectUtil.isNotNull(relation) ? Boolean.TRUE : Boolean.FALSE;
+    }
+    /**
+     * 用户是否加入
+     * @param noteId 笔记ID
+     * @param userId 用户ID
+     * @return 是否点赞
+     */
+    @Override
+    public Boolean isJoinByUid(Integer noteId, Integer userId) {
+        LambdaQueryWrapper<GameNotesRelation> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotesRelation::getId);
+        lqw.eq(GameNotesRelation::getNoteId, noteId);
+        lqw.eq(GameNotesRelation::getType, CommunityConstants.COMMUNITY_NOTE_RELATION_JOIN);
+        lqw.eq(GameNotesRelation::getUid, userId);
+        GameNotesRelation relation = dao.selectOne(lqw);
+        return ObjectUtil.isNotNull(relation) ? Boolean.TRUE : Boolean.FALSE;
+    }
+    /**
+     * 获取作者获赞数
+     * @param authorId 作者ID
+     */
+    @Override
+    public Integer getCountLikeByAuthorId(Integer authorId) {
+        LambdaQueryWrapper<GameNotesRelation> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotesRelation::getId);
+        lqw.eq(GameNotesRelation::getAuthorId, authorId);
+        lqw.eq(GameNotesRelation::getType, CommunityConstants.COMMUNITY_NOTE_RELATION_LIKE);
+        return dao.selectCount(lqw);
+    }
+
+    /**
+     * 获取点赞详情
+     * @param noteId 笔记ID
+     * @param userId 用户ID
+     */
+    @Override
+    public GameNotesRelation getOneByNoteIdAndUid(Integer noteId, Integer userId) {
+        LambdaQueryWrapper<GameNotesRelation> lqw = Wrappers.lambdaQuery();
+        lqw.eq(GameNotesRelation::getNoteId, noteId);
+        lqw.eq(GameNotesRelation::getUid, userId);
+        lqw.eq(GameNotesRelation::getType, CommunityConstants.COMMUNITY_NOTE_RELATION_LIKE);
+        lqw.last(" limit 1");
+        return dao.selectOne(lqw);
+    }
+
+    /**
+     * 删除社区笔记关联关系
+     */
+    @Override
+    public Boolean deleteByNoteId(Integer noteId) {
+        LambdaUpdateWrapper<GameNotesRelation> wrapper = Wrappers.lambdaUpdate();
+        wrapper.eq(GameNotesRelation::getNoteId, noteId);
+        return remove(wrapper);
+    }
+
+    /**
+     * 获取用户点赞分页列表
+     * @param userId 用户ID
+     * @param request 分页参数
+     */
+    @Override
+    public PageInfo<GameNotesRelation> findLikePageByUid(Integer userId, PageParamRequest request) {
+        Page<GameNotesRelation> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        LambdaQueryWrapper<GameNotesRelation> lqw = Wrappers.lambdaQuery();
+        lqw.eq(GameNotesRelation::getUid, userId);
+        lqw.eq(GameNotesRelation::getType, CommunityConstants.COMMUNITY_NOTE_RELATION_LIKE);
+        lqw.orderByDesc(GameNotesRelation::getId);
+        List<GameNotesRelation> list = dao.selectList(lqw);
+        return CommonPage.copyPageInfo(page, list);
+    }
+
+    /**
+     * 通过作者ID删除
+     * @param authorId 作责ID
+     */
+    @Override
+    public Boolean deleteByAuthorId(Integer authorId) {
+        LambdaUpdateWrapper<GameNotesRelation> wrapper = Wrappers.lambdaUpdate();
+        wrapper.eq(GameNotesRelation::getAuthorId, authorId);
+        return remove(wrapper);
+    }
+
+    @Override
+    public List<Integer> findNotesIdList(Integer userId) {
+        LambdaQueryWrapper<GameNotesRelation> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotesRelation::getNoteId);
+        lqw.eq(GameNotesRelation::getUid, userId);
+        List<GameNotesRelation> list = dao.selectList(lqw);
+        if (CollUtil.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        return list.stream().map(GameNotesRelation::getNoteId).collect(Collectors.toList());
+    }
+}
+

+ 689 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/GameNotesServiceImpl.java

@@ -0,0 +1,689 @@
+package com.zbkj.service.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.URLUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.constants.CommunityConstants;
+import com.zbkj.common.constants.Constants;
+import com.zbkj.common.constants.UserConstants;
+import com.zbkj.common.dto.CommunityNotePageDateDto;
+import com.zbkj.common.exception.CrmebException;
+import com.zbkj.common.model.community.CommunityCategory;
+import com.zbkj.common.model.community.CommunityNotes;
+import com.zbkj.common.model.community.CommunityNotesProduct;
+import com.zbkj.common.model.game.GameNotes;
+import com.zbkj.common.model.user.User;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.game.GameNotesSaveRequest;
+import com.zbkj.common.response.CommunityNoteDetailResponse;
+import com.zbkj.common.response.CommunityNotePageDateResponse;
+import com.zbkj.common.response.game.GameNoteFrontDetailResponse;
+import com.zbkj.common.result.CommonResultCode;
+import com.zbkj.common.result.CommunityResultCode;
+import com.zbkj.common.utils.CrmebUtil;
+import com.zbkj.common.utils.ValidateFormUtil;
+import com.zbkj.service.dao.community.CommunityNotesDao;
+import com.zbkj.service.dao.game.GameNotesDao;
+import com.zbkj.service.service.*;
+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.support.TransactionTemplate;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+* CommunityNotes 接口实现
+* +----------------------------------------------------------------------
+* | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+* +----------------------------------------------------------------------
+* | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+* +----------------------------------------------------------------------
+* | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+* +----------------------------------------------------------------------
+* | Author: CRMEB Team <admin@crmeb.com>
+* +----------------------------------------------------------------------
+*/
+@Slf4j
+@Service
+public class GameNotesServiceImpl extends ServiceImpl<GameNotesDao, GameNotes> implements GameNotesService {
+
+    @Resource
+    private GameNotesDao dao;
+
+    @Autowired
+    private CommunityCategoryService categoryService;
+    @Autowired
+    private CommunityTopicService topicService;
+    @Autowired
+    private CommunityReplyService replyService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private TransactionTemplate transactionTemplate;
+    @Autowired
+    private SystemAttachmentService systemAttachmentService;
+    @Autowired
+    private SystemConfigService systemConfigService;
+    @Autowired
+    private AsyncService asyncService;
+    @Autowired
+    private GameNotesRelationService gameNotesRelationService;
+
+
+    /**
+     * 是否使用社区分类
+     * @param cateId 社区分类ID
+     */
+    @Override
+    public Boolean isUseCategory(Integer cateId) {
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotes::getId);
+        lqw.eq(GameNotes::getCategoryId, cateId);
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.last("limit 1");
+        GameNotes communityNotes = dao.selectOne(lqw);
+        return ObjectUtil.isNotNull(communityNotes);
+    }
+
+    /**
+     * 社区笔记分页列表
+     * @param request 查询参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<CommunityNotePageDateResponse> findPageList(CommunityNoteSearchRequest request) {
+        Map<String, Object> map = CollUtil.newHashMap();
+        if (StrUtil.isNotBlank(request.getTitle())) {
+            map.put("title", URLUtil.decode(request.getTitle()));
+        }
+        if (ObjectUtil.isNotNull(request.getType())) {
+            map.put("type", request.getType());
+        }
+        if (ObjectUtil.isNotNull(request.getCategoryId())) {
+            map.put("categoryId", request.getCategoryId());
+        }
+        if (ObjectUtil.isNotNull(request.getAuditStatus())) {
+            map.put("auditStatus", request.getAuditStatus());
+        }
+        if (StrUtil.isNotBlank(request.getContent())) {
+            ValidateFormUtil.validatorUserCommonSearch(request);
+            String keywords = URLUtil.decode(request.getContent());
+            switch (request.getSearchType()) {
+                case UserConstants.USER_SEARCH_TYPE_ALL:
+                    map.put("keywords", keywords);
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_UID:
+                    map.put("uid", Integer.valueOf(request.getContent()));
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_NICKNAME:
+                    map.put("nickname", keywords);
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_PHONE:
+                    map.put("phone", request.getContent());
+                    break;
+            }
+        }
+        Page<CommunityNotePageDateDto> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        List<CommunityNotePageDateDto> dtoList = dao.findPageList(map);
+        if (CollUtil.isEmpty(dtoList)) {
+            return CommonPage.copyPageInfo(page, new ArrayList<>());
+        }
+        List<Integer> cateIdList = CollUtil.newArrayList();
+        List<Integer> topicIdList = CollUtil.newArrayList();
+        dtoList.forEach(e -> {
+            cateIdList.add(e.getCategoryId());
+            if (StrUtil.isNotBlank(e.getTopicIds())) {
+                topicIdList.addAll(CrmebUtil.stringToArray(e.getTopicIds()));
+            }
+        });
+        Map<Integer, String> categoryMap = categoryService.getMapInIdList(cateIdList);
+        Map<Integer, String> topicMap = topicService.getNameMapInIdList(topicIdList);
+
+        List<CommunityNotePageDateResponse> responseList = dtoList.stream().map(dto -> {
+            CommunityNotePageDateResponse response = new CommunityNotePageDateResponse();
+            BeanUtils.copyProperties(dto, response);
+            response.setCategoryName(categoryMap.get(dto.getCategoryId()));
+            if (StrUtil.isNotBlank(dto.getTopicIds())) {
+                List<String> topicList = Arrays.stream(dto.getTopicIds().split(",")).map(e -> topicMap.get(Integer.valueOf(e))).collect(Collectors.toList());
+                response.setTopicList(topicList);
+            }
+            return response;
+        }).collect(Collectors.toList());
+        return CommonPage.copyPageInfo(page, responseList);
+    }
+
+    /**
+     * 社区笔记详情
+     * @param id 笔记ID
+     */
+    @Override
+    public GameNoteFrontDetailResponse detail(Integer id) {
+        GameNotes note = getByIdException(id);
+        GameNoteFrontDetailResponse response = new GameNoteFrontDetailResponse();
+        BeanUtils.copyProperties(note, response);
+        User user = userService.getById(note.getUid());
+        response.setAuthorId(note.getUid());
+        response.setAuthorName(user.getNickname());
+        return response;
+    }
+
+    /**
+     * 社区笔记审核
+     */
+    @Override
+    public void audit(CommonAuditRequest request) {
+        if (request.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_ERROR) && StrUtil.isBlank(request.getRefusalReason())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("请填写审核拒绝原因"));
+        }
+        GameNotes notes = getByIdException(request.getId());
+        if (!notes.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_AWAIT)) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_AUDIT_STATUS_EXCEPTION);
+        }
+        notes.setAuditStatus(request.getAuditStatus());
+        if (request.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_ERROR) && StrUtil.isNotBlank(request.getRefusalReason())) {
+            notes.setRefusal(request.getRefusalReason());
+        }
+        notes.setOperateTime(DateUtil.date());
+        boolean update = updateById(notes);
+        if (!update) {
+            throw new CrmebException("社区笔记审核失败");
+        }
+        if (notes.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS)) {
+            asyncService.noteUpExp(notes.getUid(), notes.getId());
+        }
+    }
+
+    /**
+     * 社区笔记强制下架
+     */
+    @Override
+    public void forcedDown(CommonForcedDownRequest request) {
+        GameNotes notes = getByIdException(request.getId());
+        if (!notes.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS)) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_AUDIT_STATUS_EXCEPTION);
+        }
+        notes.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_CLOSE);
+        notes.setOperateTime(DateUtil.date());
+        notes.setRefusal(request.getReason());
+        boolean update = updateById(notes);
+        if (!update) {
+            throw new CrmebException("社区笔记强制下架失败");
+        }
+    }
+
+    /**
+     * 社区笔记删除
+     * @param id 笔记ID
+     */
+    @Override
+    public void delete(Integer id) {
+        GameNotes notes = getByIdException(id);
+        notes.setIsDel(Constants.COMMON_IS_FILED_ONE);
+        Boolean execute = transactionTemplate.execute(e -> {
+            updateById(notes);
+            gameNotesRelationService.deleteByNoteId(id);
+            return Boolean.TRUE;
+        });
+        if (!execute) {
+            throw new CrmebException("社区笔记删除失败");
+        }
+    }
+
+    /**
+     * 社区笔记分类批量修改
+     */
+    @Override
+    public void categoryBatchUpdate(CommunityNoteCategoryBatchUpdateRequest request) {
+        LambdaUpdateWrapper<GameNotes> wrapper = Wrappers.lambdaUpdate();
+        wrapper.set(GameNotes::getCategoryId, request.getCategoryId());
+        wrapper.in(GameNotes::getId, request.getNoteIdList());
+        update(wrapper);
+    }
+
+    /**
+     * 社区笔记推荐星级编辑
+     */
+    @Override
+    public void updateStar(CommonStarUpdateRequest request) {
+        GameNotes notes = getByIdException(request.getId());
+        if (!notes.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS)) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_AUDIT_STATUS_EXCEPTION);
+        }
+        if (notes.getStar().equals(request.getStar())) {
+            return;
+        }
+        notes.setStar(request.getStar());
+        boolean update = updateById(notes);
+        if (!update) {
+            throw new CrmebException("社区笔记推荐星级编辑失败");
+        }
+    }
+
+    /**
+     * 社区笔记评论强制关闭开关
+     * @param id 笔记ID
+     */
+    @Override
+    public void replyForceOffSwitch(Integer id) {
+        GameNotes notes = getByIdException(id);
+        notes.setReplyStatus(notes.getReplyStatus().equals(CommunityConstants.COMMUNITY_NOTE_IS_REPLY_FORCE_OFF) ? CommunityConstants.COMMUNITY_NOTE_IS_REPLY_CLOSE : CommunityConstants.COMMUNITY_NOTE_IS_REPLY_FORCE_OFF);
+        boolean update = updateById(notes);
+        if (!update) {
+            throw new CrmebException("修改社区笔记评论开关状态失败");
+        }
+    }
+
+    private PageInfo<GameNotes> findFrontSearchList(CommunityNoteFrontSearchRequest request) {
+        Page<GameNotes> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotes::getId, GameNotes::getTitle, GameNotes::getCover, GameNotes::getUid,GameNotes::getSchool,
+                GameNotes::getType, GameNotes::getJoinNum, GameNotes::getAuditStatus,GameNotes::getCategoryId,GameNotes::getContent,GameNotes::getCreateTime);
+        if (ObjectUtil.isNotNull(request.getCategoryId())) {
+            lqw.eq(GameNotes::getCategoryId, request.getCategoryId());
+        }
+        if (StrUtil.isNotBlank(request.getTitle())) {
+            lqw.like(GameNotes::getTitle, request.getTitle());
+        }
+        if (ObjectUtil.isNotNull(request.getUid())) {
+            lqw.eq(GameNotes::getUid, request.getUid());
+        }
+        if (ObjectUtil.isNotNull(request.getAuditStatus())) {
+            lqw.eq(GameNotes::getAuditStatus, request.getAuditStatus());
+        }
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.orderByDesc(GameNotes::getId);
+        List<GameNotes> list = dao.selectList(lqw);
+        list.stream().forEach(communityNote->{
+            CommunityCategory communityCategory=  categoryService.getById(communityNote.getCategoryId());
+            if(ObjectUtil.isNotNull(communityCategory)) {
+                communityNote.setIcon(communityCategory.getIcon());
+            }
+        });
+        return CommonPage.copyPageInfo(page, list);
+    }
+
+    /**
+     * 移动端社区发现笔记分页列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<GameNotes> findDiscoverNoteList(CommunityNoteFrontDiscoverRequest request) {
+        CommunityNoteFrontSearchRequest searchRequest = new CommunityNoteFrontSearchRequest();
+        if (ObjectUtil.isNotNull(request.getCategoryId())&& request.getCategoryId()>0) {
+            searchRequest.setCategoryId(request.getCategoryId());
+        }
+        if (StrUtil.isNotBlank(request.getTitle())) {
+            searchRequest.setTitle(URLUtil.decode(request.getTitle()));
+        }
+        if(ObjectUtil.isNotNull(request.getSecondType())){
+            searchRequest.setSecondType(request.getSecondType());
+        }
+        searchRequest.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        searchRequest.setCollation("star");
+        searchRequest.setPage(request.getPage());
+        searchRequest.setLimit(request.getLimit());
+        return findFrontSearchList(searchRequest);
+    }
+
+    /**
+     * 移动端社区笔记关注分页列表
+     * @param request 分页参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<GameNotes> findFollowNoteList(PageParamRequest request, Integer userId) {
+        List<Integer> notesIdList = gameNotesRelationService.findNotesIdList(userId);
+        Page<GameNotes> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        if (CollUtil.isEmpty(notesIdList)) {
+            return CommonPage.copyPageInfo(page, new ArrayList<>());
+        }
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotes::getId, GameNotes::getTitle, GameNotes::getCover, GameNotes::getContent,
+                GameNotes::getVideo, GameNotes::getUid, GameNotes::getType,
+                GameNotes::getCreateTime, GameNotes::getJoinNum, GameNotes::getImage);
+        lqw.in(GameNotes::getId, notesIdList);
+        lqw.eq(GameNotes::getAuditStatus, CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.orderByDesc(GameNotes::getId);
+        List<GameNotes> list = dao.selectList(lqw);
+        return CommonPage.copyPageInfo(page, list);
+    }
+
+    /**
+     * 获取话题关联的笔记数量
+     * @param topicId 话题ID
+     */
+    @Override
+    public Integer getCountByTopic(Integer topicId) {
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.apply("FIND_IN_SET({0}, topic_ids)", topicId);
+        return dao.selectCount(lqw);
+    }
+
+    /**
+     * 获取话题关联的笔记数量
+     * @param topicId 话题ID
+     */
+    @Override
+    public Integer getFrontCountByTopic(Integer topicId) {
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.eq(GameNotes::getAuditStatus, CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        lqw.apply("FIND_IN_SET({0}, topic_ids)", topicId);
+        return dao.selectCount(lqw);
+    }
+
+    /**
+     * 社区笔记作者列表
+     * @param authorId 作者ID
+     * @param request 分页参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<GameNotes> findAuthorNoteList(Integer authorId, PageParamRequest request) {
+        CommunityNoteFrontSearchRequest searchRequest = new CommunityNoteFrontSearchRequest();
+        searchRequest.setUid(authorId);
+        searchRequest.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        searchRequest.setPage(request.getPage());
+        searchRequest.setLimit(request.getLimit());
+        return findFrontSearchList(searchRequest);
+    }
+
+    @Override
+    public GameNotes getByIdException(Integer id) {
+        GameNotes notes = getById(id);
+        if (ObjectUtil.isNull(notes) || notes.getIsDel().equals(Constants.COMMON_IS_FILED_ONE)) {
+            throw new CrmebException(CommunityResultCode.COMMUNITY_NOTE_NOT_EXIST);
+        }
+        return notes;
+    }
+
+    /**
+     * 社区话题笔记列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<GameNotes> findTopicNoteList(CommunityNoteTopicSearchRequest request) {
+        CommunityNoteFrontSearchRequest searchRequest = new CommunityNoteFrontSearchRequest();
+        searchRequest.setTopicId(request.getTopicId());
+        searchRequest.setCollation(request.getType());
+        searchRequest.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        searchRequest.setPage(request.getPage());
+        searchRequest.setLimit(request.getLimit());
+        return findFrontSearchList(searchRequest);
+    }
+
+    /**
+     * 创建社区笔记
+     */
+    @Override
+    public void create(GameNotesSaveRequest request) {
+        validatorNoteParam(request);
+        User user=userService.getInfo();
+        //Integer userId = userService.getUserIdException();
+        GameNotes note = new GameNotes();
+        BeanUtils.copyProperties(request, note, "id");
+        note.setUid(user.getId());
+        note.setCover(systemAttachmentService.clearPrefix(request.getCover()));
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_IMAGE_CONTENT.equals(request.getType())) {
+            note.setImage(systemAttachmentService.clearPrefix(request.getImage()));
+        }
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_SHORT_VIDEO.equals(request.getType())) {
+            note.setVideo(systemAttachmentService.clearPrefix(request.getVideo()));
+        }
+        note.setSchool(user.getSchool());
+
+        List<CommunityNotesProduct> notesProductList = new ArrayList<>();
+        note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_IMAGE_CONTENT.equals(request.getType())) {
+            String textAuditSwitch = systemConfigService.getValueByKeyException(CommunityConstants.COMMUNITY_IMAGE_TEXT_AUDIT_SWITCH);
+            if (Constants.COMMON_SWITCH_OPEN.equals(textAuditSwitch)) {
+                note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_AWAIT);
+            }
+        }
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_SHORT_VIDEO.equals(request.getType())) {
+            String videoAuditSwitch = systemConfigService.getValueByKeyException(CommunityConstants.COMMUNITY_SHORT_VIDEO_AUDIT_SWITCH);
+            if (Constants.COMMON_SWITCH_OPEN.equals(videoAuditSwitch)) {
+                note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_AWAIT);
+            }
+        }
+
+        Boolean execute = transactionTemplate.execute(e -> {
+            int insert = dao.insert(note);
+            if (insert < 1) {
+                e.setRollbackOnly();
+                log.error("添加社区笔记失败,request = {}", request);
+                return Boolean.FALSE;
+            }
+            return Boolean.TRUE;
+        });
+        if (!execute) {
+            throw new CrmebException("创建社区笔记失败");
+        }
+        if (note.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS)) {
+            // 异步掉用添加用户经验
+            asyncService.noteUpExp(user.getId(), note.getId());
+        }
+    }
+
+    /**
+     * 编辑社区笔记
+     */
+    @Override
+    public void updateNote(GameNotesSaveRequest request) {
+        if (ObjectUtil.isNull(request.getId())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("请先择笔记"));
+        }
+        validatorNoteParam(request);
+        Integer userId = userService.getUserIdException();
+        GameNotes note = getByIdException(request.getId());
+        if (!note.getUid().equals(userId)) {
+            throw new CrmebException("不能操作别人的数据");
+        }
+        note.setTitle(StrUtil.isNotBlank(request.getTitle()) ? request.getTitle() : "");
+        note.setCover(systemAttachmentService.clearPrefix(request.getCover()));
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_IMAGE_CONTENT.equals(request.getType())) {
+            note.setImage(systemAttachmentService.clearPrefix(request.getImage()));
+        }
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_SHORT_VIDEO.equals(request.getType())) {
+            note.setVideo(systemAttachmentService.clearPrefix(request.getVideo()));
+        }
+        note.setContent(StrUtil.isNotBlank(request.getContent()) ? request.getContent() : "");
+        note.setCategoryId(request.getCategoryId());
+        note.setType(request.getType());
+        if (note.getAuditStatus().equals(CommunityConstants.COMMUNITY_NOTE_AUDIT_CLOSE)) {
+            note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_AWAIT);
+        } else if (CommunityConstants.COMMUNITY_NOTE_TYPE_IMAGE_CONTENT.equals(request.getType())) {
+            String textAuditSwitch = systemConfigService.getValueByKeyException(CommunityConstants.COMMUNITY_IMAGE_TEXT_AUDIT_SWITCH);
+            if (Constants.COMMON_SWITCH_OPEN.equals(textAuditSwitch)) {
+                note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_AWAIT);
+            }
+        } else if (CommunityConstants.COMMUNITY_NOTE_TYPE_SHORT_VIDEO.equals(request.getType())) {
+            String videoAuditSwitch = systemConfigService.getValueByKeyException(CommunityConstants.COMMUNITY_SHORT_VIDEO_AUDIT_SWITCH);
+            if (Constants.COMMON_SWITCH_OPEN.equals(videoAuditSwitch)) {
+                note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_AWAIT);
+            }
+        } else {
+            note.setAuditStatus(CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        }
+
+        List<CommunityNotesProduct> notesProductList = new ArrayList<>();
+
+        Boolean execute = transactionTemplate.execute(e -> {
+            boolean update = updateById(note);
+            if (!update) {
+                e.setRollbackOnly();
+                log.error("编辑社区笔记失败,request = {}", request);
+                return Boolean.FALSE;
+            }
+            return Boolean.TRUE;
+        });
+        if (!execute) {
+            throw new CrmebException("编辑社区笔记失败");
+        }
+    }
+
+    /**
+     * 社区之我的笔记列表
+     */
+    @Override
+    public PageInfo<GameNotes> findMyNoteList(Integer userId, PageParamRequest request) {
+        CommunityNoteFrontSearchRequest searchRequest = new CommunityNoteFrontSearchRequest();
+        searchRequest.setUid(userId);
+        searchRequest.setPage(request.getPage());
+        searchRequest.setLimit(request.getLimit());
+        return findFrontSearchList(searchRequest);
+    }
+
+    /**
+     * 获取新笔记通过作者
+     * @param authorId 作者ID
+     * @param num 笔记数量
+     */
+    @Override
+    public List<GameNotes> findNewNoteByAuthorId(Integer authorId, Integer num) {
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotes::getId, GameNotes::getCover, GameNotes::getType);
+        lqw.eq(GameNotes::getUid, authorId);
+        lqw.eq(GameNotes::getAuditStatus, CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.orderByDesc(GameNotes::getId);
+        lqw.last(" limit " + num);
+        return dao.selectList(lqw);
+    }
+
+    /**
+     * 社区笔记点赞数量
+     * @param noteId 笔记ID
+     * @param operationType 操作类型:add-点赞,sub-取消
+     */
+    @Override
+    public void operationJoin(Integer noteId, String operationType) {
+        LambdaUpdateWrapper<GameNotes> wrapper = Wrappers.lambdaUpdate();
+        if (operationType.equals(Constants.OPERATION_TYPE_ADD)) {
+            wrapper.setSql("join_num = like_num + 1");
+        } else {
+            wrapper.setSql("join_num = like_num - 1");
+        }
+        wrapper.eq(GameNotes::getId, noteId);
+        update(wrapper);
+    }
+
+    /**
+     * 操作社区笔记评论数量
+     * @param noteId 笔记ID
+     * @param num 评论数量
+     * @param operationType 操作类型
+     */
+    @Override
+    public void operationReplyNum(Integer noteId, Integer num, String operationType) {
+        LambdaUpdateWrapper<GameNotes> wrapper = Wrappers.lambdaUpdate();
+        if (operationType.equals(Constants.OPERATION_TYPE_ADD)) {
+            wrapper.setSql(StrUtil.format("reply_num = reply_num + {}", num));
+        } else {
+            wrapper.setSql(StrUtil.format("reply_num = reply_num - {}", num));
+        }
+        wrapper.eq(GameNotes::getId, noteId);
+        update(wrapper);
+    }
+
+    /**
+     * 社区笔记发现推荐列表
+     * @param noteId 笔记ID
+     * @param request 分页参数
+     */
+    @Override
+    public PageInfo<GameNotes> findDiscoverNoteRecommendList(Integer noteId, PageParamRequest request) {
+        GameNotes note = getByIdException(noteId);
+        Page<GameNotes> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.lt(GameNotes::getId, noteId);
+        lqw.eq(GameNotes::getType, note.getType());
+        lqw.eq(GameNotes::getAuditStatus, CommunityConstants.COMMUNITY_NOTE_AUDIT_SUCCESS);
+        lqw.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        lqw.orderByDesc(GameNotes::getJoinNum, GameNotes::getId);
+        List<GameNotes> list = dao.selectList(lqw);
+        if (CollUtil.isNotEmpty(list)) {
+            Collections.shuffle(list);
+        }
+        return CommonPage.copyPageInfo(page, list);
+    }
+
+    @Override
+    public Map<Integer, GameNotes> getMapByIdList(List<Integer> noteIdList) {
+        LambdaQueryWrapper<GameNotes> lqw = Wrappers.lambdaQuery();
+        lqw.select(GameNotes::getId, GameNotes::getTitle, GameNotes::getCover, GameNotes::getUid,
+                GameNotes::getType, GameNotes::getJoinNum, GameNotes::getContent, GameNotes::getCreateTime, GameNotes::getCategoryId);
+        lqw.in(GameNotes::getId, noteIdList);
+        List<GameNotes> list = dao.selectList(lqw);
+        Map<Integer, GameNotes> map = new HashMap<>();
+        list.forEach(e -> {
+            CommunityCategory communityCategory=  categoryService.getById(e.getCategoryId());
+            if(ObjectUtil.isNotNull(communityCategory)) {
+                e.setIcon(communityCategory.getIcon());
+            }
+            map.put(e.getId(), e);
+        });
+        return map;
+    }
+
+    /**
+     * 删除用户所有笔记
+     * @param userId 用户ID
+     */
+    @Override
+    public Boolean deleteByUid(Integer userId) {
+        LambdaUpdateWrapper<GameNotes> wrapper = Wrappers.lambdaUpdate();
+        wrapper.set(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ONE);
+        wrapper.eq(GameNotes::getUid, userId);
+        wrapper.eq(GameNotes::getIsDel, Constants.COMMON_IS_FILED_ZERO);
+        return update(wrapper);
+    }
+
+    /**
+     * 校验笔记参数
+     */
+    private void validatorNoteParam(GameNotesSaveRequest request) {
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_IMAGE_CONTENT.equals(request.getType())) {
+            if (StrUtil.isBlank(request.getImage())) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("请先上传图片"));
+            }
+            String[] split = request.getImage().split(",");
+            if (split.length > 9) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("最多只能上传9张图片"));
+            }
+            if (StrUtil.isNotBlank(request.getContent()) && request.getContent().length() > 600) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("正文不能超过600个字符"));
+            }
+
+        }
+        if (CommunityConstants.COMMUNITY_NOTE_TYPE_SHORT_VIDEO.equals(request.getType())) {
+            if (StrUtil.isBlank(request.getVideo())) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("请先上传视频"));
+            }
+            if (StrUtil.isNotBlank(request.getContent()) && request.getContent().length() > 200) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED.setMessage("视频正文不能超过200个字符"));
+            }
+
+        }
+
+    }
+}
+

+ 52 - 0
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/PayCallbackServiceImpl.java

@@ -20,6 +20,7 @@ import com.zbkj.common.model.order.RefundOrder;
 import com.zbkj.common.model.secondhand.SecondHandOrder;
 import com.zbkj.common.model.secondhand.SecondHandOrderDetail;
 import com.zbkj.common.model.secondhand.SecondHandProd;
+import com.zbkj.common.model.secondhand.SecondHandRefundOrder;
 import com.zbkj.common.model.user.User;
 import com.zbkj.common.model.wechat.WechatPayInfo;
 import com.zbkj.common.utils.CrmebDateUtil;
@@ -93,6 +94,8 @@ public class PayCallbackServiceImpl implements PayCallbackService {
     @Autowired
     private RefundOrderService refundOrderService;
     @Autowired
+    private SecondHandRefundOrderService secondHandRefundOrderService;
+    @Autowired
     private AliPayCallbackService aliPayCallbackService;
     @Autowired
     private PaidMemberOrderService paidMemberOrderService;
@@ -866,6 +869,55 @@ public class PayCallbackServiceImpl implements PayCallbackService {
     }
 
     /**
+     * 微信退款回调
+     *
+     * @param xmlInfo 微信回调json
+     * @return MyRecord
+     */
+    @Override
+    public String weChatSecondHandRefund(String xmlInfo) {
+        MyRecord notifyRecord = new MyRecord();
+        MyRecord refundRecord = refundNotify(xmlInfo, notifyRecord);
+        if (refundRecord.getStr("status").equals("fail")) {
+            logger.error("微信退款回调失败==>" + refundRecord.getColumns() + ", rawData==>" + xmlInfo + ", data==>" + notifyRecord);
+            return refundRecord.getStr("returnXml");
+        }
+
+        if (!refundRecord.getBoolean("isRefund")) {
+            logger.error("微信退款回调失败==>" + refundRecord.getColumns() + ", rawData==>" + xmlInfo + ", data==>" + notifyRecord);
+            return refundRecord.getStr("returnXml");
+        }
+        String outRefundNo = notifyRecord.getStr("out_refund_no");
+        List<SecondHandRefundOrder> refundOrderList = secondHandRefundOrderService.findByOutRefundNo(outRefundNo);
+        if (CollUtil.isEmpty(refundOrderList)) {
+            logger.error("微信退款订单查询失败==>" + refundRecord.getColumns() + ", rawData==>" + xmlInfo + ", data==>" + notifyRecord);
+            return refundRecord.getStr("returnXml");
+        }
+        SecondHandRefundOrder refundOrder = refundOrderList.get(0);
+        if (refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REFUND)) {
+            logger.error("微信退款订单已确认成功==>" + refundRecord.getColumns() + ", rawData==>" + xmlInfo + ", data==>" + notifyRecord);
+            return refundRecord.getStr("returnXml");
+        }
+        refundOrderList.forEach(r -> {
+            r.setRefundStatus(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REFUND);
+        });
+        boolean update = secondHandRefundOrderService.updateBatchById(refundOrderList);
+        if (update) {
+            List<SecondHandOrderDetail> orderDetailList= secondHandOrderDetailService.getByOrderNo(refundOrder.getOrderNo());
+            SecondHandProd  secondHandProd = secondHandProdService.getById(orderDetailList.get(0).getProductId());
+            secondHandProd.setSaleStatus(0);
+            secondHandProdService.updateById(secondHandProd);
+            // 退款task
+            refundOrderList.forEach(ro -> {
+                redisUtil.lPush(TaskConstants.ORDER_TASK_REDIS_KEY_AFTER_REFUND_BY_USER, ro.getRefundOrderNo());
+            });
+        } else {
+            logger.error("微信退款订单更新失败==>" + refundRecord.getColumns() + ", rawData==>" + xmlInfo + ", data==>" + notifyRecord);
+        }
+        return refundRecord.getStr("returnXml");
+    }
+
+    /**
      * 支付订单回调通知
      *
      * @return MyRecord

+ 1 - 8
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandOrderDetailService.java

@@ -32,14 +32,7 @@ public interface SecondHandOrderDetailService extends IService<SecondHandOrderDe
      */
     List<SecondHandOrderDetail> getByOrderNo(String orderNo);
 
-    /**
-     * 订单商品评论列表
-     * @param userId 用户id
-     * @param isReply 是否评价
-     * @param pageRequest 分页参数
-     * @return PageInfo
-     */
-    PageInfo<SecondHandOrderDetail> getReplyList(Integer userId, Boolean isReply, PageParamRequest pageRequest);
+
 
     /**
      * 订单收货

+ 1 - 13
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandOrderDetailServiceImpl.java

@@ -66,19 +66,7 @@ public class SecondHandOrderDetailServiceImpl extends ServiceImpl<SecondHandOrde
         return dao.selectList(lqw);
     }
 
-    /**
-     * 订单商品评论列表
-     * @param userId 用户id
-     * @param isReply 是否评价
-     * @param pageRequest 分页参数
-     * @return PageInfo
-     */
-    @Override
-    public PageInfo<SecondHandOrderDetail> getReplyList(Integer userId, Boolean isReply, PageParamRequest pageRequest) {
-        Page<SecondHandOrderDetail> page = PageHelper.startPage(pageRequest.getPage(), pageRequest.getLimit());
-        List<SecondHandOrderDetail> orderDetailList = dao.findReplyList(userId, isReply ? 1 : 0);
-        return CommonPage.copyPageInfo(page, orderDetailList);
-    }
+
 
     /**
      * 订单收货

+ 226 - 1
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandOrderServiceImpl.java

@@ -95,6 +95,12 @@ public class SecondHandOrderServiceImpl extends ServiceImpl<SecondHandOrderDao,
     @Autowired
     private OrderInvoiceService orderInvoiceService;
 
+    @Autowired
+    private OrderInvoiceDetailService orderInvoiceDetailService;
+
+    @Autowired
+    private LogisticService logisticService;
+
     /**
      * 根据订单编号获取订单
      *
@@ -165,9 +171,9 @@ public class SecondHandOrderServiceImpl extends ServiceImpl<SecondHandOrderDao,
                 }
                 lqw.lt(SecondHandOrder::getRefundStatus, OrderConstants.ORDER_REFUND_STATUS_REFUND);
             }
+            lqw.eq(SecondHandOrder::getRefundStatus, 0);
             lqw.eq(SecondHandOrder::getIsUserDel, false);
             lqw.eq(SecondHandOrder::getIsDel, false);
-
             lqw.orderByDesc(SecondHandOrder::getId);
             List<SecondHandOrder> orderList = dao.selectList(lqw);
             return CommonPage.copyPageInfo(page, orderList);
@@ -443,6 +449,150 @@ public class SecondHandOrderServiceImpl extends ServiceImpl<SecondHandOrderDao,
         return null;
     }
 
+    @Override
+    public PageInfo<PlatformOrderPageResponse> getPlatformAdminPage(OrderSearchRequest request) {
+        Page<SecondHandOrder> startPage = PageHelper.startPage(request.getPage(), request.getLimit());
+        Map<String, Object> map = CollUtil.newHashMap();
+        map.put("status", request.getStatus());
+        if (StrUtil.isNotBlank(request.getContent())) {
+            ValidateFormUtil.validatorUserCommonSearch(request);
+            String keywords = URLUtil.decode(request.getContent());
+            switch (request.getSearchType()) {
+                case UserConstants.USER_SEARCH_TYPE_ALL:
+                    map.put("keywords", keywords);
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_UID:
+                    map.put("uid", Integer.valueOf(request.getContent()));
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_NICKNAME:
+                    map.put("nickname", keywords);
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_PHONE:
+                    map.put("phone", request.getContent());
+                    break;
+            }
+        }
+        //时间范围
+        if (StrUtil.isNotBlank(request.getDateLimit())) {
+            DateLimitUtilVo dateLimit = CrmebDateUtil.getDateLimit(request.getDateLimit());
+            //判断时间
+            int compareDateResult = CrmebDateUtil.compareDate(dateLimit.getEndTime(), dateLimit.getStartTime(), DateConstants.DATE_FORMAT);
+            if (compareDateResult == -1) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "开始时间不能大于结束时间!");
+            }
+            if (StrUtil.isNotBlank(dateLimit.getStartTime())) {
+                map.put("startTime", dateLimit.getStartTime());
+                map.put("endTime", dateLimit.getEndTime());
+            }
+        }
+        if (ObjectUtil.isNotNull(request.getMerId()) && request.getMerId() > 0) {
+            map.put("merId", request.getMerId());
+        }
+        if (ObjectUtil.isNotNull(request.getMerName())) {
+            map.put("merName", request.getMerName());
+        }
+        if (StrUtil.isNotBlank(request.getOrderNo())) {
+            map.put("orderNo", URLUtil.decode(request.getOrderNo()));
+        }
+        if (ObjectUtil.isNotNull(request.getType())) {
+            map.put("type", request.getType());
+        }
+        List<PlatformOrderPageResponse> responseList = dao.getPlatformAdminPage(map);
+        if (CollUtil.isEmpty(responseList)) {
+            return CommonPage.copyPageInfo(startPage, CollUtil.newArrayList());
+        }
+        responseList.forEach(response -> {
+            if (response.getRefundStatus().equals(2)) {
+                response.setRefundNum(orderDetailService.getOrderRefundNum(response.getOrderNo()));
+
+            }
+            if(response.getMerId()>0) {
+                response.setMerName(userService.getAdminDetail(response.getMerId()).getNickname());
+            }
+        });
+        return CommonPage.copyPageInfo(startPage, responseList);
+    }
+
+    @Override
+    public OrderCountItemResponse getPlatformOrderStatusNum(OrderTabsHeaderRequest request) {
+        OrderCountItemResponse response = new OrderCountItemResponse();
+        // 全部订单
+        response.setAll(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_ALL));
+        // 未支付订单
+        response.setUnPaid(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_UNPAID));
+        // 未发货订单
+        response.setNotShipped(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_NOT_SHIPPED));
+        // 待收货订单
+        response.setSpike(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_SPIKE));
+        // 交易完成订单
+        response.setComplete(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_COMPLETE));
+        // 已退款订单
+        response.setRefunded(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_REFUNDED));
+        // 已删除订单
+        response.setDeleted(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_DELETED));
+        // 待核销订单
+        response.setVerification(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_AWAIT_VERIFICATION));
+        // 已收货订单
+        response.setReceiving(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_RECEIVING));
+        // 已取消订单
+        response.setCancel(getPlatCount(request, OrderConstants.MERCHANT_ORDER_STATUS_CANCEL));
+
+        return response;
+    }
+
+    @Override
+    public PlatformOrderAdminDetailResponse platformInfo(String orderNo) {
+        SecondHandOrder order = getByOrderNo(orderNo);
+        PlatformOrderAdminDetailResponse response = new PlatformOrderAdminDetailResponse();
+       // MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(orderNo);
+        BeanUtils.copyProperties(order, response);
+        BeanUtils.copyProperties(order, response);
+        List<SecondHandOrderDetail> orderDetailList = orderDetailService.getByOrderNo(orderNo);
+        List<OrderInfoFrontDataResponse> orderInfoList = orderDetailList.stream().map(e -> {
+            OrderInfoFrontDataResponse dataResponse = new OrderInfoFrontDataResponse();
+            BeanUtils.copyProperties(e, dataResponse);
+            return dataResponse;
+        }).collect(Collectors.toList());
+        response.setOrderDetailList(orderInfoList);
+
+        // 用户信息
+        User user = userService.getById(order.getUid());
+        response.setNickname(user.getNickname());
+        response.setPhone(user.getPhone());
+        response.setIsLogoff(user.getIsLogoff());
+        if (crmebConfig.getPhoneMaskSwitch()) {
+            response.setPhone(CrmebUtil.maskMobile(response.getPhone()));
+            if (StrUtil.isNotBlank(response.getUserPhone())) {
+                response.setUserPhone(CrmebUtil.maskMobile(response.getUserPhone()));
+            }
+        }
+        return response;
+    }
+
+    @Override
+    public List<OrderInvoiceResponse> getInvoiceListByMerchant(String orderNo, SystemAdmin systemAdmin) {
+        getByOrderNoAndMerId(orderNo);
+        return getInvoiceList(orderNo);
+    }
+
+    @Override
+    public List<OrderInvoiceResponse> getInvoiceList(String orderNo) {
+        return orderInvoiceService.findByOrderNo(orderNo);
+    }
+
+    @Override
+    public LogisticsResultVo getLogisticsInfo(Integer invoiceId) {
+        OrderInvoice orderInvoice = orderInvoiceService.getById(invoiceId);
+        if (ObjectUtil.isNull(orderInvoice)) {
+            throw new CrmebException(OrderResultCode.ORDER_INVOICE_NOT_EXIST);
+        }
+        if (!orderInvoice.getDeliveryType().equals(OrderConstants.ORDER_DELIVERY_TYPE_EXPRESS)) {
+            throw new CrmebException(OrderResultCode.ORDER_INVOICE_LOGISTICS_NOT_EXIST);
+        }
+        SecondHandOrder order= getByOrderNo(orderInvoice.getOrderNo());
+        return logisticService.info(orderInvoice.getTrackingNumber(), null, Optional.ofNullable(orderInvoice.getExpressCode()).orElse(""), order.getUserPhone());
+    }
+
     /**
      * 快递发货
      *
@@ -462,6 +612,8 @@ public class SecondHandOrderServiceImpl extends ServiceImpl<SecondHandOrderDao,
                 OrderInvoiceDetail invoiceDetail = new OrderInvoiceDetail();
                 BeanUtils.copyProperties(od, invoiceDetail);
                 invoiceDetail.setNum(od.getPayNum() - od.getDeliveryNum());
+                invoiceDetail.setSku("默认");
+                invoiceDetail.setAttrValueId(0);
                 invoiceDetail.setCreateTime(DateUtil.date());
                 invoiceDetail.setUpdateTime(DateUtil.date());
                 orderInvoiceDetailList.add(invoiceDetail);
@@ -488,6 +640,8 @@ public class SecondHandOrderServiceImpl extends ServiceImpl<SecondHandOrderDao,
             updateById(order);
             secondHandProdService.updateById(secondHandProd);
             orderInvoiceService.save(invoice);
+            orderInvoiceDetailList.forEach(e -> e.setInvoiceId(invoice.getId()));
+            orderInvoiceDetailService.saveBatch(orderInvoiceDetailList);
             return Boolean.TRUE;
         });
 
@@ -508,5 +662,76 @@ public class SecondHandOrderServiceImpl extends ServiceImpl<SecondHandOrderDao,
         }
 
     }
+    /**
+     * 获取订单总数(平台端)
+     *
+     * @param status String 状态
+     * @return Integer
+     */
+    private Integer getPlatCount(OrderTabsHeaderRequest request, String status) {
+        Map<String, Object> map = CollUtil.newHashMap();
+        map.put("status", status);
+        if (StrUtil.isNotBlank(request.getContent())) {
+            ValidateFormUtil.validatorUserCommonSearch(request);
+            String keywords = URLUtil.decode(request.getContent());
+            switch (request.getSearchType()) {
+                case UserConstants.USER_SEARCH_TYPE_ALL:
+                    map.put("keywords", keywords);
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_UID:
+                    map.put("uid", Integer.valueOf(request.getContent()));
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_NICKNAME:
+                    map.put("nickname", keywords);
+                    break;
+                case UserConstants.USER_SEARCH_TYPE_PHONE:
+                    map.put("phone", request.getContent());
+                    break;
+            }
+        }
+        //时间范围
+        if (StrUtil.isNotBlank(request.getDateLimit())) {
+            DateLimitUtilVo dateLimit = CrmebDateUtil.getDateLimit(request.getDateLimit());
+            //判断时间
+            int compareDateResult = CrmebDateUtil.compareDate(dateLimit.getEndTime(), dateLimit.getStartTime(), DateConstants.DATE_FORMAT);
+            if (compareDateResult == -1) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "开始时间不能大于结束时间!");
+            }
+            if (StrUtil.isNotBlank(dateLimit.getStartTime())) {
+                map.put("startTime", dateLimit.getStartTime());
+                map.put("endTime", dateLimit.getEndTime());
+            }
+        }
+        if (ObjectUtil.isNotNull(request.getMerId()) && request.getMerId() > 0) {
+            map.put("merId", request.getMerId());
+        }
+        if (StrUtil.isNotBlank(request.getOrderNo())) {
+            map.put("orderNo", URLUtil.decode(request.getOrderNo()));
+        }
+        if (ObjectUtil.isNotNull(request.getType())) {
+            map.put("type", request.getType());
+        }
+        return dao.getPlatformAdminPageCount(map);
+    }
+    /**
+     * 根据订单编号获取订单
+     *
+     * @param orderNo 订单编号
+     * @param merId   商户ID
+     * @return Order
+     * @Author 莫名
+     * @Date 2022/10/8 11:40
+     */
+    private SecondHandOrder getByOrderNoAndMerId(String orderNo) {
+        LambdaQueryWrapper<SecondHandOrder> lqw = Wrappers.lambdaQuery();
+        lqw.eq(SecondHandOrder::getOrderNo, orderNo);
+        //lqw.eq(SecondHandOrder::getSellerId, merId);
+        lqw.last(" limit 1");
+        SecondHandOrder order = dao.selectOne(lqw);
+        if (ObjectUtil.isNull(order)) {
+            throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
+        }
+        return order;
+    }
 }
 

+ 40 - 29
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandRefundOrderManagerServiceImpl.java

@@ -244,7 +244,7 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
         wxRefundVo.setOut_refund_no(refundOrderNo);
         wxRefundVo.setTotal_fee(totalPrice.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN).intValue());
         wxRefundVo.setRefund_fee(refundPrice.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN).intValue());
-        wxRefundVo.setNotify_url(apiDomain + PayConstants.WX_PAY_REFUND_NOTIFY_API_URI);
+        wxRefundVo.setNotify_url(apiDomain + PayConstants.WX_SECONDHAND_PAY_REFUND_NOTIFY_API_URI);
         String sign = WxPayUtil.getSign(wxRefundVo, signKey);
         wxRefundVo.setSign(sign);
         wechatService.payRefund(wxRefundVo, path);
@@ -262,10 +262,10 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
             if (counted <= 0) {
                 order.setStatus(OrderConstants.ORDER_STATUS_WAIT_RECEIPT);
                 if (order.getPayType().equals(PayConstants.PAY_TYPE_WE_CHAT) && order.getPayChannel().equals(PayConstants.PAY_CHANNEL_WECHAT_MINI)) {
-                    String shippingSwitch = systemConfigService.getValueByKey(WeChatConstants.CONFIG_WECHAT_ROUTINE_SHIPPING_SWITCH);
-                    if (StrUtil.isNotBlank(shippingSwitch) && shippingSwitch.equals("1")) {
-                        asyncService.wechatSendUploadShipping(order.getOrderNo());
-                    }
+//                    String shippingSwitch = systemConfigService.getValueByKey(WeChatConstants.CONFIG_WECHAT_ROUTINE_SHIPPING_SWITCH);
+//                    if (StrUtil.isNotBlank(shippingSwitch) && shippingSwitch.equals("1")) {
+//                        asyncService.wechatSendUploadShipping(order.getOrderNo());
+//                    }
                 }
             }
         }
@@ -310,7 +310,7 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
         Integer userId = userService.getUserId();
         Map<String, Object> map = CollUtil.newHashMap();
         map.put("userId", userId);
-        if (request.getType().equals(0)) {
+        if (request.getType()!=null && request.getType().equals(0)) {
             map.put("refundStatusStr", "0,2,4,5");
         }
         if (StrUtil.isNotBlank(request.getKeywords())) {
@@ -320,6 +320,26 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
         List<RefundOrderResponse> list = dao.findSearchList(map);
         return CommonPage.copyPageInfo(page, list);
     }
+    /**
+     * 退款订单列表
+     * @param request 搜索参数
+     * @return List
+     */
+    @Override
+    public PageInfo<RefundOrderResponse> findMyProcessList(OrderAfterSalesSearchRequest request) {
+        Integer userId = userService.getUserId();
+        Map<String, Object> map = CollUtil.newHashMap();
+        map.put("userId", userId);
+        if (request.getType()!=null && request.getType().equals(0)) {
+            map.put("refundStatusStr", "0,2,4,5");
+        }
+        if (StrUtil.isNotBlank(request.getKeywords())) {
+            map.put("keywords", URLUtil.decode(request.getKeywords()));
+        }
+        Page<Object> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        List<RefundOrderResponse> list = dao.findMyProcessList(map);
+        return CommonPage.copyPageInfo(page, list);
+    }
 
     /**
      * 退款订单详情(移动端)
@@ -357,7 +377,6 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
 
         response.setProductName(refundOrderInfo.getProductName());
         response.setImage(refundOrderInfo.getImage());
-        response.setSku(refundOrderInfo.getSku());
         response.setPrice(refundOrderInfo.getPrice());
         response.setRefundTime(refundOrder.getRefundTime());
         response.setPayNum(refundOrderInfo.getPayNum());
@@ -437,7 +456,7 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
      */
     @Override
     public PageInfo<PlatformRefundOrderPageResponse> getPlatformAdminPage(RefundOrderSearchRequest request) {
-        Page<RefundOrder> page = PageHelper.startPage(request.getPage(), request.getLimit());
+        Page<SecondHandRefundOrder> page = PageHelper.startPage(request.getPage(), request.getLimit());
         Map<String, Object> map = CollUtil.newHashMap();
         if (StrUtil.isNotBlank(request.getContent())) {
             ValidateFormUtil.validatorUserCommonSearch(request);
@@ -470,9 +489,9 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
                 map.put("endTime", dateLimit.getEndTime());
             }
         }
-        if (ObjectUtil.isNotNull(request.getMerId()) && request.getMerId() > 0) {
-            map.put("merId", request.getMerId());
-        }
+//        if (ObjectUtil.isNotNull(request.getMerId()) && request.getMerId() > 0) {
+//            map.put("merId", request.getMerId());
+//        }
         if (StrUtil.isNotBlank(request.getRefundOrderNo())) {
             map.put("refundOrderNo", request.getRefundOrderNo());
         }
@@ -530,7 +549,6 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
 
         response.setProductName(refundOrderInfo.getProductName());
         response.setImage(refundOrderInfo.getImage());
-        response.setSku(refundOrderInfo.getSku());
         response.setPrice(refundOrderInfo.getPrice());
         response.setRefundTime(refundOrder.getRefundTime());
         response.setPayNum(refundOrderInfo.getPayNum());
@@ -633,7 +651,7 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
     @Override
     public Integer getRefundingCount(Integer userId) {
         LambdaQueryWrapper<SecondHandRefundOrder> lqw = Wrappers.lambdaQuery();
-        lqw.eq(SecondHandRefundOrder::getUid, userId);
+        lqw.eq(SecondHandRefundOrder::getUid, userId).or().eq(SecondHandRefundOrder::getMerId,userId);
         List<Integer> statusList = new ArrayList<>();
         statusList.add(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_APPLY);
         statusList.add(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REFUNDING);
@@ -712,17 +730,17 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
      * @return 审核结果
      */
     @Override
-    public Boolean audit(OrderRefundAuditRequest request, SystemAdmin systemAdmin) {
+    public Boolean audit(OrderRefundAuditRequest request) {
         validatedAuditRequest(request);
-
         SecondHandRefundOrder refundOrder = getInfoException(request.getRefundOrderNo());
+        SecondHandOrder order = orderService.getByOrderNo(refundOrder.getOrderNo());
         if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_APPLY)) {
             throw new CrmebException(OrderResultCode.REFUND_ORDER_STATUS_ABNORMAL);
         }
-        if (!refundOrder.getMerId().equals(systemAdmin.getMerId())) {
+        if (!refundOrder.getMerId().equals(order.getSellerId())) {
             throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
         }
-        SecondHandOrder order = orderService.getByOrderNo(refundOrder.getOrderNo());
+
         if (ObjectUtil.isNull(order)) {
             throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST.setMessage("退款单关联的订单不存在"));
         }
@@ -775,7 +793,7 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
      * @param refundOrderNo 退款单号
      */
     @Override
-    public Boolean receiving(String refundOrderNo, SystemAdmin systemAdmin) {
+    public Boolean receiving(String refundOrderNo) {
         SecondHandRefundOrder refundOrder = getInfoException(refundOrderNo);
         if (refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REJECT)
             || refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REFUNDING)
@@ -783,11 +801,11 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
             || refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REVOKE)) {
             throw new CrmebException(OrderResultCode.REFUND_ORDER_STATUS_ABNORMAL);
         }
-        if (!refundOrder.getMerId().equals(systemAdmin.getMerId())) {
+        SecondHandOrder order = orderService.getByOrderNo(refundOrder.getOrderNo());
+        if (!refundOrder.getMerId().equals(order.getSellerId())) {
             throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
         }
 
-        SecondHandOrder order = orderService.getByOrderNo(refundOrder.getOrderNo());
         Boolean refundResult = refundPrice(refundOrder, order);
         if (refundResult) {
             refundOrderStatusService.add(refundOrder.getRefundOrderNo(), RefundOrderConstants.REFUND_ORDER_LOG_RECEIVING, "售后单商家确认收货");
@@ -1127,7 +1145,6 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
         SecondHandOrderDetail orderDetail = orderDetailService.getById(refundOrderInfo.getOrderDetailId());
         BigDecimal refundPrice;
         if (orderDetail.getPayNum().equals(refundOrderInfo.getApplyRefundNum())) {
-            // sku整退
             refundPrice = orderDetail.getPayPrice();
             orderDetail.setRefundPrice(refundPrice);
             refundOrderInfo.setRefundPrice(refundPrice);
@@ -1137,32 +1154,26 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
                 refundOrderInfo.setRefundFreightFee(orderDetail.getFreightFee());
                 orderDetail.setRefundFreightFee(orderDetail.getFreightFee());
             }
-        } else if (orderDetail.getPayNum() == (orderDetail.getRefundNum() + refundOrderInfo.getApplyRefundNum())) { // sku分退
+        } else if (orderDetail.getPayNum() == (orderDetail.getRefundNum() + refundOrderInfo.getApplyRefundNum())) { //
             refundPrice = orderDetail.getPayPrice().subtract(orderDetail.getRefundPrice());
-            // sku最后一部分退款
             orderDetail.setRefundPrice(orderDetail.getPayPrice());
             refundOrderInfo.setRefundPrice(refundPrice);
             refundOrderInfo.setMerchantRefundPrice(refundPrice);
-
             if (orderDetail.getFreightFee().compareTo(BigDecimal.ZERO) > 0) {
                 refundOrderInfo.setRefundFreightFee(orderDetail.getFreightFee().subtract(orderDetail.getRefundFreightFee()));
                 orderDetail.setRefundFreightFee(orderDetail.getFreightFee());
             }
         } else {
-            // sku非最后一部分退款
             BigDecimal ratio = new BigDecimal(refundOrderInfo.getApplyRefundNum()).divide(new BigDecimal(orderDetail.getPayNum()), 10, BigDecimal.ROUND_HALF_UP);
             refundPrice = orderDetail.getPayPrice().multiply(ratio).setScale(2, BigDecimal.ROUND_HALF_UP);
             orderDetail.setRefundPrice(orderDetail.getRefundPrice().add(refundPrice));
             refundOrderInfo.setRefundPrice(refundPrice);
             refundOrderInfo.setMerchantRefundPrice(refundPrice);
-
-
             if (orderDetail.getFreightFee().compareTo(BigDecimal.ZERO) > 0) {
                 refundOrderInfo.setRefundFreightFee(orderDetail.getFreightFee().multiply(ratio).setScale(2, BigDecimal.ROUND_HALF_UP));
                 orderDetail.setRefundFreightFee(orderDetail.getRefundFreightFee().add(refundOrderInfo.getRefundFreightFee()));
             }
         }
-
         refundOrder.setRefundPrice(refundPrice);
         refundOrder.setMerchantRefundPrice(refundOrderInfo.getMerchantRefundPrice());
 
@@ -1171,7 +1182,7 @@ public class SecondHandRefundOrderManagerServiceImpl extends ServiceImpl<SecondH
         //退款
         if (order.getPayType().equals(PayConstants.PAY_TYPE_WE_CHAT) && refundPrice.compareTo(BigDecimal.ZERO) > 0) {
             try {
-                SecondHandOrder platOrder = orderService.getByOrderNo(order.getPlatOrderNo());
+                SecondHandOrder platOrder = orderService.getByOrderNo(order.getOrderNo());
                 wxRefund(order, refundOrder.getOutRefundNo(), refundPrice, platOrder.getPayPrice());
             } catch (Exception e) {
                 e.printStackTrace();

+ 11 - 4
ydd_mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/SecondHandRefundOrderServiceImpl.java

@@ -93,6 +93,15 @@ public class SecondHandRefundOrderServiceImpl extends ServiceImpl<SecondHandRefu
     }
 
     /**
+     * 售后订单列表
+     * @param request 搜索参数
+     * @return List
+     */
+    @Override
+    public PageInfo<RefundOrderResponse> getH5MyProcessList(OrderAfterSalesSearchRequest request) {
+        return refundOrderManagerService.findMyProcessList(request);
+    }
+    /**
      * 退款订单详情(移动端)
      * @param refundOrderNo 退款订单号
      * @return RefundOrderInfoResponse
@@ -236,8 +245,7 @@ public class SecondHandRefundOrderServiceImpl extends ServiceImpl<SecondHandRefu
      */
     @Override
     public Boolean audit(OrderRefundAuditRequest request) {
-        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
-        return refundOrderManagerService.audit(request, systemAdmin);
+        return refundOrderManagerService.audit(request);
     }
 
     /**
@@ -246,8 +254,7 @@ public class SecondHandRefundOrderServiceImpl extends ServiceImpl<SecondHandRefu
      */
     @Override
     public Boolean receiving(String refundOrderNo) {
-        SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
-        return refundOrderManagerService.receiving(refundOrderNo, systemAdmin);
+        return refundOrderManagerService.receiving(refundOrderNo);
     }
 
     /**

+ 40 - 0
ydd_mer_java/crmeb-service/src/main/resources/mapper/secondhand/SecondHandOrderDetailMapper.xml

@@ -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.zbkj.service.dao.SecondHandOrderDetailDao">
+    <select id="findAfterSaleApplyList" resultType="com.zbkj.common.model.secondhand.SecondHandOrderDetail">
+        select od.* from eb_second_hand_order_detail od
+        left join eb_second_hand_order o on o.order_no = od.order_no
+        where
+        (od.uid = #{uid} or od.seller_id = #{uid})
+        and od.product_type in (0,2)
+        and o.status not in (0,6,9)
+        and o.is_user_del = 0 and o.level = 0
+        and o.refund_status &lt; 3
+        and (od.apply_refund_num + od.refund_num) &lt; od.pay_num
+        <if test="keywords != '' and keywords != null ">
+            and (od.order_no = #{keywords} or od.product_name like CONCAT('%', #{keywords}, '%'))
+        </if>
+        order by od.id desc
+    </select>
+
+    <select id="getSalesNumByDateAndProductId" resultType="java.lang.Integer">
+        select IFNULL(sum(pay_num), 0) as pay_num from eb_second_hand_order_detail
+        where order_no in (SELECT order_no FROM `eb_second_hand_order` where paid = 1 and is_del = 0 and date_format(pay_time, '%Y-%m-%d') = #{date})
+        and product_id = #{proId}
+    </select>
+
+    <select id="getSalesByDateAndProductId" resultType="java.math.BigDecimal">
+        select IFNULL(sum(price), 0) as price from eb_second_hand_order_detail
+        where order_no in (SELECT order_no FROM `eb_second_hand_order` where paid = 1 and is_del = 0 and date_format(pay_time, '%Y-%m-%d') = #{date})
+        and product_id = #{proId}
+    </select>
+
+    <select id="getAwaitReplyCount" resultType="java.lang.Integer">
+        select count(*) from eb_second_hand_order_detail od
+        left join eb_second_hand_order o on o.order_no = od.order_no and o.status in (5,6) and o.is_user_del = 0 and o.level = 1
+        where
+        od.is_receipt = 1
+        and od.uid = #{userId}
+        and od.product_type in (0,2,4,5,6)
+    </select>
+</mapper>

+ 441 - 0
ydd_mer_java/crmeb-service/src/main/resources/mapper/secondhand/SecondHandOrderMapper.xml

@@ -0,0 +1,441 @@
+<?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.zbkj.service.dao.secondhand.SecondHandOrderDao">
+
+    <select id="getProductNumCount" resultType="java.lang.Integer">
+        select IFNULL(sum(od.pay_num),0)
+        from eb_second_hand_order o
+        left join eb_second_hand_order_detail od on o.order_no = od.order_no
+        where o.is_del = 0
+--         and o.refund_status &lt; 3
+        and o.cancel_status = 0
+        and o.status &lt; 9
+        and o.uid = #{uid}
+        and o.type = #{marketingType}
+        and od.product_id = #{proId}
+    </select>
+
+    <select id="findFrontList" resultType="com.zbkj.common.model.order.Order" parameterType="Map">
+        select * from eb_order
+        where
+        uid = #{userId}
+        <if test="status != null and status &gt;= 0">
+            <choose>
+                <when test="status == 1">
+                    and `status` in (1,2)
+                    and group_buy_record_status in (99,10)
+                </when>
+                <when test="status == 3">
+                    and `status` = 3
+                    and group_buy_record_status in (99,10)
+                </when>
+                <otherwise>
+                    and `status` = #{status}
+                </otherwise>
+            </choose>
+            and refund_status &lt; 3
+        </if>
+        and is_user_del  = 0
+        and is_merchant_del  = 0
+        and second_type &lt;&gt; 4
+        and is_del = 0
+        <if test="keywords != null and keywords !='' ">
+            and (order_no like CONCAT('%',#{keywords},'%')
+                or
+                order_no in (select order_no from eb_order_detail where product_name like CONCAT('%',#{keywords},'%')))
+        </if>
+        <if test="secondType != null">
+            and second_type = 1
+        </if>
+        order by id desc
+    </select>
+
+    <select id="getPlatformAdminPage" resultType="com.zbkj.common.response.PlatformOrderPageResponse" parameterType="Map">
+        select o.seller_id as merId, o.order_no as orderNo, o.uid, o.pay_price as payPrice, o.pay_type as payType, o.paid,
+            o.status, o.refund_status as refundStatus, o.is_user_del as isUserDel, o.is_seller_del as isMerchantDel,
+            o.cancel_status as cancelStatus, o.level, o.type, o.create_time as createTime,
+            o.total_num as totalNum,
+            u.nickname,u.is_logoff
+            from eb_second_hand_order o
+            left join eb_user as u on o.uid = u.id
+            left join eb_user as u1 on o.seller_id = u1.id
+            where o.is_del = 0
+        <choose>
+            <when test='status == "unPaid"'>
+                and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
+            </when>
+            <when test='status == "notShipped"'>
+                and o.status in (1,2) and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "spike"'>
+                and o.status = 4 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "receiving"'>
+                and o.status = 5 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "complete"'>
+                and o.status = 6
+            </when>
+            <when test='status == "refunded"'>
+                and o.paid = 1 and o.cancel_status = 0 and o.refund_status = 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "awaitVerification"'>
+                and o.status = 3 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "deleted"'>
+                and o.is_user_del = 1
+            </when>
+            <when test='status == "cancel"'>
+                and o.paid = 0 and o.status = 9 and o.cancel_status in (1,2) and o.is_user_del = 0
+            </when>
+        </choose>
+        <if test="merId != null">
+            and o.seller_id = #{merId}
+        </if>
+        <if test="merName != null and merName !=''">
+            and  u1.nickname like CONCAT('%',#{merName},'%')
+        </if>
+        <if test="orderNo != null and orderNo !=''">
+            and o.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="type != null">
+            and o.type = #{type}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and o.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            o.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and o.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by o.id desc
+    </select>
+
+    <select id="getMerchantAdminPage" resultType="com.zbkj.common.response.MerchantOrderPageResponse" parameterType="Map">
+        select o.mer_id as merId, o.order_no as orderNo, o.uid, o.pay_price as payPrice, o.pay_type as payType, o.paid,
+        o.status, o.refund_status as refundStatus, o.is_user_del as isUserDel, o.total_num as totalNum,
+        o.cancel_status as cancelStatus, o.level, o.type, o.create_time as createTime,o.second_type as secondType, o.group_buy_record_status as groupBuyRecordStatus,
+        o.cancel_status as cancelStatus, o.level, o.type, o.create_time as createTime,o.second_type as secondType,
+        mo.merchant_remark as merchantRemark,
+        u.nickname,u.is_logoff
+        from eb_order o
+        left join eb_merchant_order as mo on o.order_no = mo.order_no
+        left join eb_user as u on o.uid = u.id
+        where o.is_del = 0 and o.is_merchant_del = 0 and o.level = 1 and o.mer_id = #{merId}
+        and o.second_type in (0,2,5,6)
+        <choose>
+            <when test='status == "unPaid"'>
+                and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
+            </when>
+            <when test='status == "notShipped"'>
+                and o.status in (1,2) and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0 and o.group_buy_record_status in (10,99)
+            </when>
+            <when test='status == "spike"'>
+                and o.status = 4 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "receiving"'>
+                and o.status = 5 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "complete"'>
+                and o.status = 6
+            </when>
+            <when test='status == "awaitVerification"'>
+                and o.status = 3 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0 and o.group_buy_record_status in (10,99)
+            </when>
+            <when test='status == "refunded"'>
+                and o.paid = 1 and o.cancel_status = 0 and o.refund_status = 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "deleted"'>
+                and o.is_user_del = 1
+            </when>
+            <when test='status == "cancel"'>
+                and o.paid = 0 and o.status = 9 and o.cancel_status in (1,2) and o.is_user_del = 0
+            </when>
+        </choose>
+        <if test="orderNo != null and orderNo !=''">
+            and o.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="type != null">
+            and o.type = #{type}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and o.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            o.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and o.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by o.id desc
+    </select>
+
+    <select id="getIntegralOrderCount" resultType="java.lang.Integer" parameterType="Map">
+        select count(*)
+        from eb_order o
+        left join eb_user as u on o.uid = u.id
+        where o.is_del = 0 and o.mer_id = 0 and o.second_type = 1
+        <choose>
+            <when test='status == "unPaid"'>
+                and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
+            </when>
+            <when test='status == "notShipped"'>
+                and o.status in (1,2) and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "spike"'>
+                and o.status = 4 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "receiving"'>
+                and o.status = 5 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "complete"'>
+                and o.status = 6
+            </when>
+            <when test='status == "refunded"'>
+                and o.paid = 1 and o.cancel_status = 0 and o.refund_status = 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "deleted"'>
+                and o.is_user_del = 1
+            </when>
+            <when test='status == "cancel"'>
+                and o.paid = 0 and o.status = 9 and o.cancel_status in (1,2) and o.is_user_del = 0
+            </when>
+        </choose>
+        <if test="orderNo != null and orderNo !=''">
+            and o.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and o.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            o.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and o.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by o.id desc
+    </select>
+
+    <select id="findIntegralOrderPageByPlat" resultType="com.zbkj.common.response.IntegralOrderPageResponse" parameterType="Map">
+        select o.order_no as orderNo, o.uid, o.pay_price as payPrice, o.paid,
+        o.status, o.is_user_del as isUserDel, o.total_num as totalNum,
+        o.cancel_status as cancelStatus, o.level, o.type, o.create_time as createTime,o.second_type as secondType,
+        o.redeem_integral as redeemIntegral,mo.merchant_remark as merchantRemark,
+        u.nickname,u.is_logoff
+        from eb_order o
+        left join eb_user as u on o.uid = u.id
+        left join eb_merchant_order as mo on mo.order_no = o.order_no
+        where o.is_del = 0 and o.mer_id = 0 and o.second_type = 1
+        <choose>
+            <when test='status == "unPaid"'>
+                and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
+            </when>
+            <when test='status == "notShipped"'>
+                and o.status in (1,2) and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "spike"'>
+                and o.status = 4 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "receiving"'>
+                and o.status = 5 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "complete"'>
+                and o.status = 6
+            </when>
+            <when test='status == "refunded"'>
+                and o.paid = 1 and o.cancel_status = 0 and o.refund_status = 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "deleted"'>
+                and o.is_user_del = 1
+            </when>
+            <when test='status == "cancel"'>
+                and o.paid = 0 and o.status = 9 and o.cancel_status in (1,2) and o.is_user_del = 0
+            </when>
+        </choose>
+        <if test="orderNo != null and orderNo !=''">
+            and o.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and o.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            o.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and o.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by o.id desc
+    </select>
+
+    <select id="getMerchantAdminPageCount" resultType="java.lang.Integer" parameterType="Map">
+        select count(*)
+        from eb_order o
+        left join eb_user as u on o.uid = u.id
+        where o.is_del = 0 and o.is_merchant_del = 0 and o.level = 1
+        and o.second_type in (0,2,5,6)
+        <if test="merId != null">
+            and o.mer_id = #{merId}
+        </if>
+        <choose>
+            <when test='status == "unPaid"'>
+                and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
+            </when>
+            <when test='status == "notShipped"'>
+                and o.status in (1,2) and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0 and o.group_buy_record_status in (10,99)
+            </when>
+            <when test='status == "spike"'>
+                and o.status = 4 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "receiving"'>
+                and o.status = 5 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "complete"'>
+                and o.status = 6
+            </when>
+            <when test='status == "refunded"'>
+                and o.paid = 1 and o.cancel_status = 0 and o.refund_status = 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "awaitVerification"'>
+                and o.status = 3 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0 and o.group_buy_record_status in (10,99)
+            </when>
+            <when test='status == "deleted"'>
+                and o.is_user_del = 1
+            </when>
+            <when test='status == "cancel"'>
+                and o.paid = 0 and o.status = 9 and o.cancel_status in (1,2) and o.is_user_del = 0
+            </when>
+        </choose>
+        <if test="orderNo != null and orderNo !=''">
+            and o.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="type != null">
+            and o.type = #{type}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and o.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            o.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and o.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by o.id desc
+    </select>
+
+    <select id="getPlatformAdminPageCount" resultType="java.lang.Integer" parameterType="Map">
+        select count(*)
+        from eb_second_hand_order o
+        left join eb_user as u on o.uid = u.id
+        where o.is_del = 0
+        <choose>
+            <when test='status == "unPaid"'>
+                and o.paid = 0 and o.status = 0 and o.cancel_status = 0 and o.is_user_del = 0
+            </when>
+            <when test='status == "notShipped"'>
+                and o.status in (1,2) and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "spike"'>
+                and o.status = 4 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "receiving"'>
+                and o.status = 5 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "complete"'>
+                and o.status = 6
+            </when>
+            <when test='status == "refunded"'>
+                and o.paid = 1 and o.cancel_status = 0 and o.refund_status = 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "awaitVerification"'>
+                and o.status = 3 and o.cancel_status = 0 and o.refund_status &lt;&gt; 3 and o.is_user_del = 0
+            </when>
+            <when test='status == "deleted"'>
+                and o.is_user_del = 1
+            </when>
+            <when test='status == "cancel"'>
+                and o.paid = 0 and o.status = 9 and o.cancel_status in (1,2) and o.is_user_del = 0
+            </when>
+        </choose>
+        <if test="merId != null">
+            and o.mer_id = #{merId}
+        </if>
+        <if test="orderNo != null and orderNo !=''">
+            and o.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="type != null">
+            and o.type = #{type}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and o.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            o.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and o.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+    </select>
+</mapper>

+ 199 - 0
ydd_mer_java/crmeb-service/src/main/resources/mapper/secondhand/SecondHandRefundOrderMapper.xml

@@ -0,0 +1,199 @@
+<?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.zbkj.service.dao.secondhand.SecondHandRefundOrderDao">
+    <select id="getRefundOrderDetailByRefundOrderNo" resultType="com.zbkj.common.response.RefundOrderInfoResponse">
+        select ro.refund_order_no as refundOrderNo, ro.order_no as orderNo, ro.after_sales_type as afterSalesType, ro.refund_reason_wap as refundReasonWap,
+               ro.refund_reason_wap_img as refundReasonWapImg, ro.refund_reason_wap_explain as refundReasonWapExplain, ro.refund_status as refundStatus,
+               ro.refund_reason as refundReason, ro.refund_price as refundPrice, ro.refund_time as refundTime, ro.create_time as createTime,
+               roi.product_id as productId, roi.product_name as productName, roi.image as image,  roi.apply_refund_num as applyRefundNum,
+               roi.product_type as productType,
+               ro.receiver, ro.receiver_phone as receiverPhone, ro.receiver_address_detail as receiverAddressDetail, ro.return_goods_type as returnGoodsType,
+               ro.express_name as expressName, ro.tracking_number as trackingNumber, ro.telephone, roi.price as productPrice,ro.mer_id as merId,
+               ro.is_user_revoke as isUserRevoke, ro.promoter_type as promoterType
+        from eb_secondhand_refund_order ro
+                 left join eb_secondhand_refund_order_info roi on ro.refund_order_no = roi.refund_order_no
+        where
+        ro.refund_order_no = #{refundOrderNo}
+    </select>
+
+    <select id="findSearchList" resultType="com.zbkj.common.response.RefundOrderResponse" parameterType="Map">
+        SELECT ro.refund_order_no as refundOrderNo, roi.product_name as productName
+        , ro.refund_price as refundPrice, ro.refund_status as refundStatus
+        , roi.image as image,  roi.apply_refund_num as applyRefundNum
+        , ro.after_sales_type as afterSalesType, ro.return_goods_type as returnGoodsType
+        , ro.receiver, ro.receiver_phone as receiverPhone, ro.receiver_address_detail as receiverAddressDetail
+        , ro.mer_id as merId
+        FROM eb_secondhand_refund_order ro
+        left join eb_secondhand_refund_order_info roi on ro.refund_order_no = roi.refund_order_no
+        where (ro.uid = #{userId})
+        <if test="refundStatusStr != null and keywords != '' ">
+            and find_in_set(ro.refund_status, #{refundStatusStr})
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (ro.refund_order_no = #{keywords} or ro.order_no = #{keywords}
+                     or roi.product_name like CONCAT('%',#{keywords},'%'))
+        </if>
+        ORDER BY ro.id desc
+    </select>
+    <select id="findMyProcessList" resultType="com.zbkj.common.response.RefundOrderResponse" parameterType="Map">
+        SELECT ro.refund_order_no as refundOrderNo, roi.product_name as productName
+        , ro.refund_price as refundPrice, ro.refund_status as refundStatus
+        , roi.image as image,  roi.apply_refund_num as applyRefundNum
+        , ro.after_sales_type as afterSalesType, ro.return_goods_type as returnGoodsType
+        , ro.receiver, ro.receiver_phone as receiverPhone, ro.receiver_address_detail as receiverAddressDetail
+        , ro.mer_id as merId
+        FROM eb_secondhand_refund_order ro
+        left join eb_secondhand_refund_order_info roi on ro.refund_order_no = roi.refund_order_no
+        where ( ro.mer_id = #{userId})
+        <if test="refundStatusStr != null and keywords != '' ">
+            and find_in_set(ro.refund_status, #{refundStatusStr})
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (ro.refund_order_no = #{keywords} or ro.order_no = #{keywords}
+            or roi.product_name like CONCAT('%',#{keywords},'%'))
+        </if>
+        ORDER BY ro.id desc
+    </select>
+    <select id="findCanAutoRevokeOrderList" resultType="com.zbkj.common.model.order.RefundOrder" parameterType="Map">
+        SELECT ro.*
+        FROM eb_refund_order ro
+        left join eb_refund_order_status ros on ros.order_no = ro.refund_order_no and ros.change_type = 'audit'
+        where
+        ro.refund_status = 4
+        and ro.after_sales_type = 2
+        and ros.create_time &lt;= #{revokeTime}
+    </select>
+
+    <select id="getPlatformAdminPage" resultType="com.zbkj.common.response.PlatformRefundOrderPageResponse" parameterType="Map">
+        select ro.refund_order_no as refundOrderNo, ro.order_no as orderNo, ro.uid, ro.refund_status as refundStatus,
+               ro.refund_price as refundPrice, ro.platform_remark as platformRemark,ro.create_time as createTime,
+               ro.after_sales_type as afterSalesType, ro.return_goods_type as returnGoodsType,
+               ro.is_compulsory_refund as isCompulsoryRefund,
+               u.nickname as userNickName
+        from eb_secondhand_refund_order ro
+        left join eb_user u on ro.uid = u.id
+        <where>
+            <if test="merId != null">
+                and ro.mer_id = #{merId}
+            </if>
+            <if test="orderNo != null and orderNo !=''">
+                and ro.order_no like CONCAT('%',#{orderNo},'%')
+            </if>
+            <if test="refundOrderNo != null and refundOrderNo !=''">
+                and ro.refund_order_no = #{refundOrderNo}
+            </if>
+            <if test="trackingNumber != null and trackingNumber !=''">
+                and ro.tracking_number = #{trackingNumber}
+            </if>
+            <if test="refundStatus != null">
+                and ro.refund_status = #{refundStatus}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and ro.create_time between #{startTime} and #{endTime}
+            </if>
+            <if test="keywords != '' and keywords != null ">
+                and (
+                ro.uid like CONCAT('%',#{keywords},'%') or
+                u.nickname like CONCAT('%',#{keywords},'%') or
+                u.phone like CONCAT('%',#{keywords},'%')
+                )
+            </if>
+            <if test="uid != null ">
+                and ro.uid = #{uid}
+            </if>
+            <if test="nickname != '' and nickname != null ">
+                and u.nickname like CONCAT('%',#{nickname},'%')
+            </if>
+            <if test="phone != '' and phone != null ">
+                and u.phone like CONCAT('%',#{phone},'%')
+            </if>
+        </where>
+        order by ro.id desc
+    </select>
+
+    <select id="getMerchantAdminPage" resultType="com.zbkj.common.response.MerchantRefundOrderPageResponse" parameterType="Map">
+        select ro.refund_order_no as refundOrderNo, ro.order_no as orderNo, ro.uid, ro.refund_status as refundStatus,
+        ro.refund_price as refundPrice, ro.mer_remark as merRemark,ro.create_time as createTime,
+        ro.after_sales_type as afterSalesType, ro.return_goods_type as returnGoodsType,
+        ro.is_compulsory_refund as isCompulsoryRefund, ro.total_num as totalNum,
+        u.nickname as userNickName
+        from eb_secondhand_refund_order ro
+        left join eb_user u on ro.uid = u.id
+        where ro.mer_id = #{merId}
+        <if test="orderNo != null and orderNo !=''">
+            and ro.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="refundOrderNo != null and refundOrderNo !=''">
+            and ro.refund_order_no = #{refundOrderNo}
+        </if>
+        <if test="trackingNumber != null and trackingNumber !=''">
+            and ro.tracking_number = #{trackingNumber}
+        </if>
+        <if test="refundStatus != null">
+            and ro.refund_status = #{refundStatus}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and ro.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            ro.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and ro.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by ro.id desc
+    </select>
+
+    <select id="getMerchantAdminPageCount" resultType="java.lang.Integer" parameterType="Map">
+        select count(*)
+        from eb_secondhand_refund_order ro
+        left join eb_user u on ro.uid = u.id
+        where 1=1
+        <if test="merId != null">
+            and ro.mer_id = #{merId}
+        </if>
+        <if test="orderNo != null and orderNo !=''">
+            and ro.order_no like CONCAT('%',#{orderNo},'%')
+        </if>
+        <if test="refundOrderNo != null and refundOrderNo !=''">
+            and ro.refund_order_no = #{refundOrderNo}
+        </if>
+        <if test="trackingNumber != null and trackingNumber !=''">
+            and ro.tracking_number = #{trackingNumber}
+        </if>
+        <if test="refundStatus != null">
+            and ro.refund_status = #{refundStatus}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            and ro.create_time between #{startTime} and #{endTime}
+        </if>
+        <if test="keywords != '' and keywords != null ">
+            and (
+            ro.uid like CONCAT('%',#{keywords},'%') or
+            u.nickname like CONCAT('%',#{keywords},'%') or
+            u.phone like CONCAT('%',#{keywords},'%')
+            )
+        </if>
+        <if test="uid != null ">
+            and ro.uid = #{uid}
+        </if>
+        <if test="nickname != '' and nickname != null ">
+            and u.nickname like CONCAT('%',#{nickname},'%')
+        </if>
+        <if test="phone != '' and phone != null ">
+            and u.phone like CONCAT('%',#{phone},'%')
+        </if>
+        order by ro.id desc
+    </select>
+
+</mapper>

ファイルの差分が大きいため隠しています
+ 4 - 0
ydd_mer_java/replay_pid17280.log


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません