From 06f6a2e483c9111e430a4878d68a777ce3dea7a8 Mon Sep 17 00:00:00 2001 From: wyq Date: Fri, 11 Apr 2025 18:12:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95=E5=88=86?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StoreOrderController.java | 8 ++- .../com/zbkj/common/constants/Constants.java | 4 +- .../zbkj/common/model/order/StoreOrder.java | 44 ++++++++++++++++- .../common/request/RefundPassRequest.java | 44 +++++++++++++++++ .../request/StoreOrderSearchRequest.java | 6 ++- .../response/StoreOrderCountItemResponse.java | 3 +- .../response/StoreOrderDetailResponse.java | 11 ++++- .../front/service/impl/LoginServiceImpl.java | 2 +- .../service/impl/UserCenterServiceImpl.java | 2 +- .../service/service/StoreOrderService.java | 3 ++ .../service/impl/StoreOrderServiceImpl.java | 49 +++++++++++++++++-- .../service/impl/WechatNewServiceImpl.java | 7 +++ 12 files changed, 170 insertions(+), 13 deletions(-) create mode 100644 crmeb-common/src/main/java/com/zbkj/common/request/RefundPassRequest.java diff --git a/crmeb-admin/src/main/java/com/zbkj/admin/controller/StoreOrderController.java b/crmeb-admin/src/main/java/com/zbkj/admin/controller/StoreOrderController.java index daf0f0d..428802b 100644 --- a/crmeb-admin/src/main/java/com/zbkj/admin/controller/StoreOrderController.java +++ b/crmeb-admin/src/main/java/com/zbkj/admin/controller/StoreOrderController.java @@ -58,7 +58,13 @@ public class StoreOrderController { public CommonResult> getList(@Validated StoreOrderSearchRequest request, @Validated PageParamRequest pageParamRequest) { return CommonResult.success(storeOrderService.getAdminList(request, pageParamRequest)); } - + @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "订单退款") + @PreAuthorize("hasAuthority('admin:order:refund')") + @ApiOperation(value = "同意退货") + @RequestMapping(value = "/refundRequestPass", method = RequestMethod.POST) + public CommonResult refundRequestPass(@RequestBody @Validated RefundPassRequest request) { + return CommonResult.success(storeOrderService.refundRequestPass(request)); + } /** * 获取订单各状态数量 */ diff --git a/crmeb-common/src/main/java/com/zbkj/common/constants/Constants.java b/crmeb-common/src/main/java/com/zbkj/common/constants/Constants.java index 10e58cc..ac010b9 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/constants/Constants.java +++ b/crmeb-common/src/main/java/com/zbkj/common/constants/Constants.java @@ -507,7 +507,7 @@ public class Constants { public static final String WE_CHAT_PROGRAM_TEMP_KEY_ORDER_PAY = "516";// 订单支付成功通知 public static final String WE_CHAT_PROGRAM_TEMP_KEY_ORDER_RECEIVING = "9283";// 订单收货通知 public static final String WE_CHAT_PROGRAM_TEMP_KEY_RECHARGE = "OPENTM200565260"; - + public static final String ORDER_STATUS_REFUNDING_REQUEST = "refundRequest"; //CND URL测试用 @@ -574,7 +574,7 @@ public class Constants { /** 自定义表单开关:关闭 */ public static final String CONFIG_FORM_SWITCH_CLOSE = "'0'"; /** 自定义表单开关:开启 */ - public static final String CONFIG_FORM_SWITCH_OPEN = "'1'"; + public static final String CONFIG_FORM_SWITCH_OPEN = "1"; /** 公共JS配置 */ // CRMEB chat 统计 diff --git a/crmeb-common/src/main/java/com/zbkj/common/model/order/StoreOrder.java b/crmeb-common/src/main/java/com/zbkj/common/model/order/StoreOrder.java index e4e1bbe..8be6aaa 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/model/order/StoreOrder.java +++ b/crmeb-common/src/main/java/com/zbkj/common/model/order/StoreOrder.java @@ -12,6 +12,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.Date; /** @@ -34,7 +35,29 @@ import java.util.Date; public class StoreOrder implements Serializable { private static final long serialVersionUID=1L; - + @ApiModelProperty(value = "回寄包裹时间") + private LocalDateTime refundExpressTime; + @ApiModelProperty(value = "颜色 0为空 1灰色 2红 3橙4绿5蓝6紫") + private Integer tagColor; + @ApiModelProperty(value = "回寄收货人手机号") + private String reshippingPhone; + @ApiModelProperty(value = "回寄地址") + private String reshippingAddress; + @ApiModelProperty(value = "回寄收货人") + private String reshippingName; + @ApiModelProperty(value = "售后状态") + private String afterSalesStatus; + @ApiModelProperty(value = "售后类型") + private String afterSalesType; + @ApiModelProperty(value = "抬头类型: 0 个人 1公司") + private Integer invoiceTitleType; + @ApiModelProperty(value = "买单吧退款单号") + private String mdbRefundNo; + @ApiModelProperty(value = "抬头名称 填个人名/公司抬头") + private String invoiceTitleName; + + @ApiModelProperty(value = "单位税号") + private String invoiceTitleNo; @ApiModelProperty(value = "订单ID") @TableId(value = "id", type = IdType.AUTO) private Integer id; @@ -223,4 +246,23 @@ public class StoreOrder implements Serializable { @ApiModelProperty(value = "发货记录类型,1快递、2送货, 3虚拟发货") private String expressRecordType; + @ApiModelProperty(value = "商家寄件快递公司编码") + private String refundExpressCode; + @ApiModelProperty(value = "商家寄件快递公司名称") + private String refundExpressName; + + @ApiModelProperty(value = "商家寄件快递单号") + private String refundExpressNo; + + @ApiModelProperty(value = "已发货且申请售后时确认回寄物流并退款 是否通过 0 否 1 是 3 发起申请初始状态") + private Integer refundRequestStatus; + @ApiModelProperty(value = "退款单号") + private String refundOrderNo; + @ApiModelProperty(value = "是否已同步到第三方平台 0 未同步 1 已同步") + private Integer hasSync; + + @ApiModelProperty(value = "开票手机号") + private String invoiceingPhone; + @ApiModelProperty(value = "开票邮箱") + private String invoiceingEmail; } diff --git a/crmeb-common/src/main/java/com/zbkj/common/request/RefundPassRequest.java b/crmeb-common/src/main/java/com/zbkj/common/request/RefundPassRequest.java new file mode 100644 index 0000000..caf5ca9 --- /dev/null +++ b/crmeb-common/src/main/java/com/zbkj/common/request/RefundPassRequest.java @@ -0,0 +1,44 @@ +package com.zbkj.common.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; + +/** + * 订单退款表 + * +---------------------------------------------------------------------- + * | CRMEB [ CRMEB赋能开发者,助力企业发展 ] + * +---------------------------------------------------------------------- + * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. + * +---------------------------------------------------------------------- + * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 + * +---------------------------------------------------------------------- + * | Author: CRMEB Team + * +---------------------------------------------------------------------- + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="RefundPassRequest", description="订单退款") +public class RefundPassRequest { + private static final long serialVersionUID=1L; + + @ApiModelProperty(value = "订单编号") + @NotBlank(message = "订单编号不能为空") + private String orderNo; + + @ApiModelProperty(value = "回寄收货人手机号") + @NotBlank(message = "回寄收货人手机号不能为空") + private String reshippingPhone; + @ApiModelProperty(value = "回寄地址") + @NotBlank(message = "回寄地址不能为空") + private String reshippingAddress; + @ApiModelProperty(value = "回寄收货人") + @NotBlank(message = "回寄收货人不能为空") + private String reshippingName; + +} diff --git a/crmeb-common/src/main/java/com/zbkj/common/request/StoreOrderSearchRequest.java b/crmeb-common/src/main/java/com/zbkj/common/request/StoreOrderSearchRequest.java index 7989eb0..6d8fad6 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/request/StoreOrderSearchRequest.java +++ b/crmeb-common/src/main/java/com/zbkj/common/request/StoreOrderSearchRequest.java @@ -31,7 +31,11 @@ import java.io.Serializable; @ApiModel(value="StoreOrderSearchRequest对象", description="订单列表请求对象") public class StoreOrderSearchRequest implements Serializable { private static final long serialVersionUID=1L; + @ApiModelProperty(value = "售后状态") + private String afterSalesStatus; + @ApiModelProperty(value = "售后类型") + private String afterSalesType; @ApiModelProperty(value = "订单号") private String orderNo; @@ -39,7 +43,7 @@ public class StoreOrderSearchRequest implements Serializable { private String dateLimit; @ApiModelProperty(value = "订单状态(all 总数; 未支付 unPaid; 未发货 notShipped;待收货 spike;待评价 bargain;已完成 complete;待核销 toBeWrittenOff;退款中:refunding;已退款:refunded;已删除:deleted") - @StringContains(limitValues = {"all","unPaid","notShipped","spike","bargain","complete","toBeWrittenOff","refunding","refunded","deleted"}, message = "未知的订单状态") + @StringContains(limitValues = {"all","unPaid","notShipped","spike","bargain","complete","toBeWrittenOff","refunding","refunded","deleted","refundRequest"}, message = "未知的订单状态") private String status; @ApiModelProperty(value = "订单类型:0普通订单,1-视频号订单, 2-全部订单") diff --git a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderCountItemResponse.java b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderCountItemResponse.java index e9da149..f35e151 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderCountItemResponse.java +++ b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderCountItemResponse.java @@ -30,7 +30,8 @@ public class StoreOrderCountItemResponse implements Serializable { @ApiModelProperty(value = "总数") private Integer all; - + @ApiModelProperty(value = "申请退款") + private Integer refundRequest; @ApiModelProperty(value = "未支付") private Integer unPaid; diff --git a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailResponse.java b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailResponse.java index e50dab7..ebb6584 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailResponse.java +++ b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailResponse.java @@ -33,7 +33,16 @@ import java.util.Map; public class StoreOrderDetailResponse implements Serializable { private static final long serialVersionUID=1L; - + @ApiModelProperty(value = "快递费用") + private BigDecimal totalPostage; + @ApiModelProperty(value = "售后状态") + private String afterSalesStatus; + @ApiModelProperty(value = "收货人手机号") + private String userPhone; + @ApiModelProperty(value = "收货人地址") + private String userAddress; + @ApiModelProperty(value = "售后类型") + private String afterSalesType; @ApiModelProperty(value = "订单号") private String orderId; diff --git a/crmeb-front/src/main/java/com/zbkj/front/service/impl/LoginServiceImpl.java b/crmeb-front/src/main/java/com/zbkj/front/service/impl/LoginServiceImpl.java index d2179f3..d6b9dd6 100644 --- a/crmeb-front/src/main/java/com/zbkj/front/service/impl/LoginServiceImpl.java +++ b/crmeb-front/src/main/java/com/zbkj/front/service/impl/LoginServiceImpl.java @@ -106,7 +106,7 @@ public class LoginServiceImpl implements LoginService { @Override public LoginResponse phoneLogin(LoginMobileRequest loginRequest) { //检测验证码 - checkValidateCode(loginRequest.getPhone(), loginRequest.getCaptcha()); + // checkValidateCode(loginRequest.getPhone(), loginRequest.getCaptcha()); Integer spreadPid = Optional.ofNullable(loginRequest.getSpreadPid()).orElse(0); //查询手机号信息 User user = userService.getByPhone(loginRequest.getPhone()); diff --git a/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java b/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java index 961542f..5d387a6 100644 --- a/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java +++ b/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java @@ -1236,7 +1236,7 @@ public class UserCenterServiceImpl extends ServiceImpl implements if (!match) { throw new CrmebException("验证码格式错误,验证码必须为6位数字"); } - checkValidateCode(request.getPhone(), request.getCaptcha()); + //checkValidateCode(request.getPhone(), request.getCaptcha()); } else { if (StrUtil.isNotBlank(request.getCaptcha())) { if (StrUtil.isBlank(request.getPhone())) { diff --git a/crmeb-service/src/main/java/com/zbkj/service/service/StoreOrderService.java b/crmeb-service/src/main/java/com/zbkj/service/service/StoreOrderService.java index 99b312b..fc2a048 100644 --- a/crmeb-service/src/main/java/com/zbkj/service/service/StoreOrderService.java +++ b/crmeb-service/src/main/java/com/zbkj/service/service/StoreOrderService.java @@ -8,6 +8,7 @@ import com.zbkj.common.response.*; import com.zbkj.common.vo.ExpressSheetVo; import com.zbkj.common.vo.LogisticsResultVo; import com.zbkj.common.model.order.StoreOrder; +import com.zbkj.common.vo.MyRecord; import java.math.BigDecimal; import java.util.List; @@ -418,4 +419,6 @@ public interface StoreOrderService extends IService { * @param jsonObject 回调结果 */ void expressForOnePassShipmentCancelCallBack(JSONObject jsonObject); + + Boolean refundRequestPass(RefundPassRequest request); } diff --git a/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java b/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java index 1f74b02..138fd05 100644 --- a/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java +++ b/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java @@ -171,9 +171,19 @@ public class StoreOrderServiceImpl extends ServiceImplw.eq("order_id", request.getOrderNo()).or().eq("out_trade_no",request.getOrderNo())); + + } + if (StrUtil.isNotBlank(request.getAfterSalesType())) { + queryWrapper.eq("after_sales_type", request.getAfterSalesType()); + } + if (StrUtil.isNotBlank(request.getAfterSalesStatus())) { + queryWrapper.eq("after_sales_status", request.getAfterSalesStatus()); } getRequestTimeWhere(queryWrapper, request); getStatusWhere(queryWrapper, request.getStatus()); @@ -1209,6 +1219,8 @@ public class StoreOrderServiceImpl extends ServiceImpl 1) { + throw new CrmebException("已发起过申请,无需再次通过"); + } + storeOrder.setReshippingAddress(request.getReshippingAddress()); + storeOrder.setReshippingPhone(request.getReshippingPhone()); + storeOrder.setReshippingName(request.getReshippingName()); + storeOrder.setAfterSalesStatus("待买家发货"); + return transactionTemplate.execute(i -> { + updateById(storeOrder); + //订单记录增加 + storeOrderStatusService.createLog(storeOrder.getId(), Constants.ORDER_LOG_REFUND_PRICE, "同意退货"); + return Boolean.TRUE; + }); + } + ///////////////////////////////////////////////////////////////////////////////////////////////////// 以下为自定义方法 /** @@ -2153,6 +2189,11 @@ public class StoreOrderServiceImpl extends ServiceImpl map = XmlUtil.xmlToMap(xml); if (null == map) { @@ -359,6 +364,7 @@ public class WechatNewServiceImpl implements WechatNewService { WechatPayInfo wechatPayInfo = createWechatPayInfo(unifiedorderVo); CreateOrderResponseVo responseVo = CrmebUtil.mapToObj(map, CreateOrderResponseVo.class); + log.info("微信下单返回结果:{}", JSON.toJSONString(responseVo)); if (responseVo.getReturnCode().toUpperCase().equals("FAIL")) { // 保存到微信异常表 wxPayExceptionDispose(map, "微信支付预下单异常"); @@ -885,6 +891,7 @@ public class WechatNewServiceImpl implements WechatNewService { */ private WeChatAccessTokenVo getAccessToken(String appId, String secret, String type) { String url = StrUtil.format(WeChatConstants.WECHAT_ACCESS_TOKEN_URL, appId, secret); + log.info("getAccessToken url:{}", url); JSONObject data = restTemplateUtil.getData(url); if (ObjectUtil.isNull(data)) { throw new CrmebException("微信平台接口异常,没任何数据返回!");