diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/AfterServiceRecordController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/AfterServiceRecordController.java index cc95678a..0a478bd0 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/AfterServiceRecordController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/AfterServiceRecordController.java @@ -151,4 +151,24 @@ public class AfterServiceRecordController extends BaseController { public AjaxResult remove(String ids) { return toAjax(afterServiceRecordService.deleteAfterServiceRecordByIds(ids)); } + + /** + * 师傅重发/补发操作 + * 师傅端点击重发补发按钮,保存重发/补发方案 + */ + @PostMapping("/workerResendPlan") + @ResponseBody + public AjaxResult workerResendPlan(@RequestBody AfterServiceRecord afterServiceRecord) { + return afterServiceRecordService.workerResendPlan(afterServiceRecord); + } + + /** + * 退货操作 + * 客户或师傅端进行退货操作,保存退货信息 + */ + @PostMapping("/returnGoods") + @ResponseBody + public AjaxResult returnGoods(@RequestBody AfterServiceRecord afterServiceRecord) { + return afterServiceRecordService.returnGoods(afterServiceRecord); + } } diff --git a/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java b/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java index 6453d669..2f84ba99 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/AfterServiceRecord.java @@ -89,6 +89,54 @@ public class AfterServiceRecord extends BaseEntity @Excel(name = "是否自动处理:0-否,1-是") private Integer isAutoProcessed; + /** 售后类型:1-未收到货退单退款,2-未收到货退款,3-已收到货退款退货 */ + @Excel(name = "售后类型:1-未收到货退单退款,2-未收到货退款,3-已收到货退款退货") + private Integer afterServiceType; + + /** 退货状态:0-待处理,1-同意退货,2-拒绝退货,3-客户已发货,4-商家已收货,5-退款完成 */ + @Excel(name = "退货状态:0-待处理,1-同意退货,2-拒绝退货,3-客户已发货,4-商家已收货,5-退款完成") + private Integer returnStatus; + + /** 退货地址 */ + @Excel(name = "退货地址") + private String returnAddress; + + /** 退货联系人 */ + @Excel(name = "退货联系人") + private String returnContact; + + /** 退货联系电话 */ + @Excel(name = "退货联系电话") + private String returnPhone; + + /** 退货类型:1=发快递/物流,2=送货上门,3=自提 */ + @Excel(name = "退货类型:1=发快递/物流,2=送货上门,3=自提") + private Integer returnType; + + /** 退货备注 */ + @Excel(name = "退货备注") + private String returnRemark; + + /** 退货图片 */ + @Excel(name = "退货图片") + private String returnImages; + + /** 退货物流单号 */ + @Excel(name = "退货物流单号") + private String returnTrackingNumber; + + /** 退货发货时间 */ + @Excel(name = "退货发货时间") + private Date returnShipTime; + + /** 商家收货时间 */ + @Excel(name = "商家收货时间") + private Date merchantReceiveTime; + + /** 师傅重发/补发方案:1-重发/补发,您无需退货,2-重发/补发前,您需先退货,3-请您退回商品,给您换货,4-请退回商品,为您售后换货 */ + @Excel(name = "师傅重发/补发方案") + private Integer workerResendPlan; + private boolean excludeAfterServiceFinished; private List imgsList; diff --git a/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java b/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java index 916e08d2..f8a76ecf 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java @@ -86,4 +86,22 @@ public interface IAfterServiceRecordService { * @param afterServiceRecord 售后记录 */ void executeRefundLogic(AfterServiceRecord afterServiceRecord); + + /** + * 师傅重发/补发操作 + * 师傅端点击重发补发按钮,保存重发/补发方案 + * + * @param afterServiceRecord 售后记录 + * @return 操作结果 + */ + AjaxResult workerResendPlan(AfterServiceRecord afterServiceRecord); + + /** + * 退货操作 + * 客户或师傅端进行退货操作,保存退货信息 + * + * @param afterServiceRecord 售后记录 + * @return 操作结果 + */ + AjaxResult returnGoods(AfterServiceRecord afterServiceRecord); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java index 6e2f7d3a..f9d078ee 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java @@ -483,4 +483,140 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService } } + /** + * 师傅重发/补发操作 + * 师傅端点击重发补发按钮,保存重发/补发方案 + * + * @param param 售后记录 + * @return 操作结果 + */ + @Override + public AjaxResult workerResendPlan(AfterServiceRecord param) { + try { + // 参数校验 + if (param.getId() == null) { + return AjaxResult.error("售后记录ID不能为空"); + } + if (param.getWorkerResendPlan() == null) { + return AjaxResult.error("重发/补发方案不能为空"); + } + + // 查询售后记录 + AfterServiceRecord afterServiceRecord = afterServiceRecordMapper.selectAfterServiceRecordById(param.getId()); + if (afterServiceRecord == null) { + return AjaxResult.error("售后记录不存在"); + } + + // 检查售后记录状态 + if (afterServiceRecord.getCustomerFinalCheck() != null) { + return AjaxResult.error("售后记录已处理完成,无法修改"); + } + + // 更新重发/补发方案 + afterServiceRecord.setWorkerResendPlan(param.getWorkerResendPlan()); + afterServiceRecord.setUpdateBy(param.getUpdateBy()); + + // 更新数据库 + int result = afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); + if (result > 0) { + log.info("师傅重发/补发方案更新成功,售后记录ID:{},方案:{}", param.getId(), param.getWorkerResendPlan()); + return AjaxResult.success("重发/补发方案保存成功",afterServiceRecord); + } else { + return AjaxResult.error("重发/补发方案保存失败"); + } + } catch (Exception e) { + log.error("师傅重发/补发操作异常,售后记录ID:{}", param.getId(), e); + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } + + /** + * 退货操作 + * 客户或师傅端进行退货操作,保存退货信息 + * + * @param param 售后记录 + * @return 操作结果 + */ + @Override + public AjaxResult returnGoods(AfterServiceRecord param) { + try { + // 参数校验 + if (param.getId() == null) { + return AjaxResult.error("售后记录ID不能为空"); + } + + // 查询售后记录 + AfterServiceRecord afterServiceRecord = afterServiceRecordMapper.selectAfterServiceRecordById(param.getId()); + if (afterServiceRecord == null) { + return AjaxResult.error("售后记录不存在"); + } + + // 检查售后记录状态 + if (afterServiceRecord.getCustomerFinalCheck() != null) { + return AjaxResult.error("售后记录已处理完成,无法修改"); + } + + // 更新退货信息 + if (param.getReturnAddress() != null) { + afterServiceRecord.setReturnAddress(param.getReturnAddress()); + } + if (param.getReturnContact() != null) { + afterServiceRecord.setReturnContact(param.getReturnContact()); + } + if (param.getReturnPhone() != null) { + afterServiceRecord.setReturnPhone(param.getReturnPhone()); + } + if (param.getReturnType() != null) { + afterServiceRecord.setReturnType(param.getReturnType()); + } + if (param.getReturnRemark() != null) { + afterServiceRecord.setReturnRemark(param.getReturnRemark()); + } + if (param.getReturnImages() != null) { + afterServiceRecord.setReturnImages(param.getReturnImages()); + } + if (param.getReturnTrackingNumber() != null) { + afterServiceRecord.setReturnTrackingNumber(param.getReturnTrackingNumber()); + } + if (param.getReturnShipTime() != null) { + afterServiceRecord.setReturnShipTime(param.getReturnShipTime()); + } + if (param.getReturnStatus() != null) { + afterServiceRecord.setReturnStatus(param.getReturnStatus()); + } + + // 如果选择物流/快递退货且提供了物流单号,自动设置发货时间和状态 + if (param.getReturnType() != null && param.getReturnType() == 1 && + param.getReturnTrackingNumber() != null && !param.getReturnTrackingNumber().trim().isEmpty()) { + + // 如果提供了物流单号但没有设置发货时间,自动设置为当前时间 + if (param.getReturnShipTime() == null) { + afterServiceRecord.setReturnShipTime(new Date()); + } + + // 如果提供了物流单号但没有设置状态,自动设置为"客户已发货" + if (param.getReturnStatus() == null) { + afterServiceRecord.setReturnStatus(3); // 3-客户已发货 + } + + log.info("检测到物流/快递退货且提供物流单号,自动设置发货时间和状态,售后记录ID:{},物流单号:{}", + param.getId(), param.getReturnTrackingNumber()); + } + + afterServiceRecord.setUpdateBy(param.getUpdateBy()); + + // 更新数据库 + int result = afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); + if (result > 0) { + log.info("退货信息更新成功,售后记录ID:{},退货状态:{}", param.getId(), param.getReturnStatus()); + return AjaxResult.success("退货信息保存成功", afterServiceRecord); + } else { + return AjaxResult.error("退货信息保存失败"); + } + } catch (Exception e) { + log.error("退货操作异常,售后记录ID:{}", param.getId(), e); + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } + } diff --git a/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml b/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml index 707f4734..624f6f58 100644 --- a/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/AfterServiceRecordMapper.xml @@ -28,13 +28,26 @@ + + + + + + + + + + + + select id, customer_reason_type, customer_reason, order_detail_id, oper_type, worker_feedback_result, worker_feedback_reason_type, worker_feedback_reason, refund, agreed_refund, original_refund, customer_final_check, create_by, create_time, update_by, update_time, remark, refund_apply_time, customer_agree_redo, - redo_complete_time, redo_complete_remark, redo_complete_images, is_auto_processed + redo_complete_time, redo_complete_remark, redo_complete_images, is_auto_processed, after_service_type, return_status, + return_address, return_contact, return_phone, return_type, return_remark, return_images, return_tracking_number, return_ship_time, merchant_receive_time, worker_resend_plan from after_service_record @@ -85,6 +98,18 @@ redo_complete_remark, redo_complete_images, is_auto_processed, + after_service_type, + return_status, + return_address, + return_contact, + return_phone, + return_type, + return_remark, + return_images, + return_tracking_number, + return_ship_time, + merchant_receive_time, + worker_resend_plan, create_by, update_by, remark, @@ -106,6 +131,18 @@ #{redoCompleteRemark}, #{redoCompleteImages}, #{isAutoProcessed}, + #{afterServiceType}, + #{returnStatus}, + #{returnAddress}, + #{returnContact}, + #{returnPhone}, + #{returnType}, + #{returnRemark}, + #{returnImages}, + #{returnTrackingNumber}, + #{returnShipTime}, + #{merchantReceiveTime}, + #{workerResendPlan}, #{createBy}, #{updateBy}, #{remark}, @@ -133,6 +170,18 @@ redo_complete_remark = #{redoCompleteRemark}, redo_complete_images = #{redoCompleteImages}, is_auto_processed = #{isAutoProcessed}, + after_service_type = #{afterServiceType}, + return_status = #{returnStatus}, + return_address = #{returnAddress}, + return_contact = #{returnContact}, + return_phone = #{returnPhone}, + return_type = #{returnType}, + return_remark = #{returnRemark}, + return_images = #{returnImages}, + return_tracking_number = #{returnTrackingNumber}, + return_ship_time = #{returnShipTime}, + merchant_receive_time = #{merchantReceiveTime}, + worker_resend_plan = #{workerResendPlan}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy},