增加 重发补发 以及退货的接口

This commit is contained in:
cb 2025-09-03 16:30:42 +08:00
parent ef8fc2c492
commit 464fab9fa1
5 changed files with 272 additions and 1 deletions

View File

@ -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);
}
}

View File

@ -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<AfterServiceImgs> imgsList;

View File

@ -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);
}

View File

@ -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());
}
}
}

View File

@ -28,13 +28,26 @@
<result property="redoCompleteRemark" column="redo_complete_remark" />
<result property="redoCompleteImages" column="redo_complete_images" />
<result property="isAutoProcessed" column="is_auto_processed" />
<result property="afterServiceType" column="after_service_type" />
<result property="returnStatus" column="return_status" />
<result property="returnAddress" column="return_address" />
<result property="returnContact" column="return_contact" />
<result property="returnPhone" column="return_phone" />
<result property="returnType" column="return_type" />
<result property="returnRemark" column="return_remark" />
<result property="returnImages" column="return_images" />
<result property="returnTrackingNumber" column="return_tracking_number" />
<result property="returnShipTime" column="return_ship_time" />
<result property="merchantReceiveTime" column="merchant_receive_time" />
<result property="workerResendPlan" column="worker_resend_plan" />
</resultMap>
<sql id="selectAfterServiceRecordVo">
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
</sql>
@ -85,6 +98,18 @@
<if test="redoCompleteRemark != null">redo_complete_remark,</if>
<if test="redoCompleteImages != null">redo_complete_images,</if>
<if test="isAutoProcessed != null">is_auto_processed,</if>
<if test="afterServiceType != null">after_service_type,</if>
<if test="returnStatus != null">return_status,</if>
<if test="returnAddress != null">return_address,</if>
<if test="returnContact != null">return_contact,</if>
<if test="returnPhone != null">return_phone,</if>
<if test="returnType != null">return_type,</if>
<if test="returnRemark != null">return_remark,</if>
<if test="returnImages != null">return_images,</if>
<if test="returnTrackingNumber != null">return_tracking_number,</if>
<if test="returnShipTime != null">return_ship_time,</if>
<if test="merchantReceiveTime != null">merchant_receive_time,</if>
<if test="workerResendPlan != null">worker_resend_plan,</if>
<if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if>
<if test="remark != null">remark,</if>
@ -106,6 +131,18 @@
<if test="redoCompleteRemark != null">#{redoCompleteRemark},</if>
<if test="redoCompleteImages != null">#{redoCompleteImages},</if>
<if test="isAutoProcessed != null">#{isAutoProcessed},</if>
<if test="afterServiceType != null">#{afterServiceType},</if>
<if test="returnStatus != null">#{returnStatus},</if>
<if test="returnAddress != null">#{returnAddress},</if>
<if test="returnContact != null">#{returnContact},</if>
<if test="returnPhone != null">#{returnPhone},</if>
<if test="returnType != null">#{returnType},</if>
<if test="returnRemark != null">#{returnRemark},</if>
<if test="returnImages != null">#{returnImages},</if>
<if test="returnTrackingNumber != null">#{returnTrackingNumber},</if>
<if test="returnShipTime != null">#{returnShipTime},</if>
<if test="merchantReceiveTime != null">#{merchantReceiveTime},</if>
<if test="workerResendPlan != null">#{workerResendPlan},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="remark != null">#{remark},</if>
@ -133,6 +170,18 @@
<if test="redoCompleteRemark != null">redo_complete_remark = #{redoCompleteRemark},</if>
<if test="redoCompleteImages != null">redo_complete_images = #{redoCompleteImages},</if>
<if test="isAutoProcessed != null">is_auto_processed = #{isAutoProcessed},</if>
<if test="afterServiceType != null">after_service_type = #{afterServiceType},</if>
<if test="returnStatus != null">return_status = #{returnStatus},</if>
<if test="returnAddress != null">return_address = #{returnAddress},</if>
<if test="returnContact != null">return_contact = #{returnContact},</if>
<if test="returnPhone != null">return_phone = #{returnPhone},</if>
<if test="returnType != null">return_type = #{returnType},</if>
<if test="returnRemark != null">return_remark = #{returnRemark},</if>
<if test="returnImages != null">return_images = #{returnImages},</if>
<if test="returnTrackingNumber != null">return_tracking_number = #{returnTrackingNumber},</if>
<if test="returnShipTime != null">return_ship_time = #{returnShipTime},</if>
<if test="merchantReceiveTime != null">merchant_receive_time = #{merchantReceiveTime},</if>
<if test="workerResendPlan != null">worker_resend_plan = #{workerResendPlan},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>