Commit d60dd880 authored by lining's avatar lining

feat: 订单超时自动取消

parent 97b59ab1
......@@ -42,9 +42,6 @@ public class ServiceOrderVO {
@ApiModelProperty(value = "订单创建时间")
private Date createTime;
@ApiModelProperty(value = "订单修改时间")
private Date modifyTime;
@ApiModelProperty(value = "客户上传需求图片,最多8张")
private List<String> demandImgUrls;
......
......@@ -32,6 +32,7 @@ import org.springframework.util.CollectionUtils;
import tk.mybatis.mapper.entity.Condition;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
......@@ -161,6 +162,8 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
serviceOrder.setPrice(dto.getPrice());
serviceOrder.setOrderStatus(ServiceOrderStatusEnum.SEND.getStatus());
serviceOrder.setModifyBy(userId);
// 超时时间
serviceOrder.setCancelTime(new Date());
int result = serviceOrderMapper.updateByPrimaryKeySelective(serviceOrder);
......
......@@ -12,6 +12,8 @@ public class BizConstants {
public static class OrderConstants {
public static final String ORDER_ID = "orderId";
public static final String ORDER_STATUS = "orderStatus";
public static final long TIMEOUT_CANCEL_LIMIT = 1000 * 60 * 30;
}
public static class FormatConstants {
......
......@@ -126,13 +126,6 @@ public class ServiceOrder implements Serializable {
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 修改时间
*/
@Column(name = "modify_time")
@ApiModelProperty("修改时间")
private Date modifyTime;
@Column(name = "create_by")
@ApiModelProperty("创建人")
private Long createBy;
......@@ -145,6 +138,10 @@ public class ServiceOrder implements Serializable {
@ApiModelProperty("估价员id")
private Long valuatorId;
@Column(name = "cancel_time")
@ApiModelProperty("订单自动取消时间")
private Date cancelTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.onsiteservice.miniapp.job;
import com.onsiteservice.constant.constant.BizConstants;
import com.onsiteservice.constant.constant.SysParamConstants;
import com.onsiteservice.constant.enums.ServiceOrderOpSourceEnum;
import com.onsiteservice.constant.enums.ServiceOrderStatusEnum;
import com.onsiteservice.dao.component.RecordComponent;
import com.onsiteservice.dao.mapper.service.ServiceOrderMapper;
import com.onsiteservice.dao.mapper.sys.SysParamMapper;
import com.onsiteservice.entity.order.ServiceOrder;
import com.onsiteservice.entity.sys.SysParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import tk.mybatis.mapper.entity.Condition;
import javax.annotation.Resource;
import java.util.List;
/**
* <P></P>
*
* @author 李宁
* @version v1.0
* @since 2022/7/19 14:25
*/
@Service
@Transactional(rollbackFor = Exception.class)
@Slf4j
public class ServiceOrderCancelJob {
private static final String MSG = "超时未付款自动取消";
@Resource
private ServiceOrderMapper serviceOrderMapper;
@Resource
private SysParamMapper sysParamMapper;
@Resource
private RecordComponent recordComponent;
@Scheduled(cron = "0 * * * * *")
public void cancelServiceOrder() {
log.info("cancelServiceOrder start!");
// 超时时间
Condition sysParamCondition = new Condition(SysParam.class);
sysParamCondition.createCriteria().andEqualTo("code", SysParamConstants.ORDER_PAY_TIMEOUT);
List<SysParam> sysParamList = sysParamMapper.selectByCondition(sysParamCondition);
long timeOut = CollectionUtils.isEmpty(sysParamList) ? BizConstants.OrderConstants.TIMEOUT_CANCEL_LIMIT : Long.parseLong(sysParamList.get(0).getValue());
// 超时订单
Condition c = new Condition(ServiceOrder.class);
c.createCriteria().andEqualTo(BizConstants.OrderConstants.ORDER_STATUS, ServiceOrderStatusEnum.SEND.getStatus());
List<ServiceOrder> serviceOrderList = serviceOrderMapper.selectByCondition(c);
serviceOrderList.forEach(serviceOrder -> {
if ((System.currentTimeMillis() - serviceOrder.getCancelTime().getTime()) >= timeOut) {
serviceOrder.setOrderStatus(ServiceOrderStatusEnum.CANCEL.getStatus());
serviceOrder.setRemark(MSG);
int result = serviceOrderMapper.updateByPrimaryKey(serviceOrder);
if (result == 1) {
log.info("cancelServiceOrder success serviceOrder: {}", serviceOrder);
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.CANCEL.getStatus(), MSG, ServiceOrderOpSourceEnum.MINI_APP, null, null, null);
}
}
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment