Commit 4a039366 authored by shiyu's avatar shiyu

寄售单检测

parent cea5f99e
......@@ -75,6 +75,9 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
@Override
public Result findList(ConsignSaleRequestDto dto) {
try {
//检查用户未确认的寄售单是否超时,只检查一页的数据,并非全量数据
checkTimeOutForCancel();
List<ConsignSale> list = consignSaleDao.findByPage(dto);
PageInfo<ConsignSale> pageInfo = new PageInfo<>(list);
if (CollectionUtils.isEmpty(list)) {
......@@ -379,9 +382,61 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
*/
private void checkTimeOutForCancel(){
//查询图文估计待用户确认的订单
ConsignSaleRequestDto consignSaleRequestDto = new ConsignSaleRequestDto();
consignSaleRequestDto.setSystemState(ConsignSaleEnum.SaleForSysStateEnum.WAIT_IMG_VALUATE.getCode());
List<ConsignSale> list = consignSaleDao.findImgValuateConfirmOrdersByPage(consignSaleRequestDto);
ConsignSaleRequestDto imgValuateRequestDto = new ConsignSaleRequestDto();
imgValuateRequestDto.setSystemState(ConsignSaleEnum.SaleForSysStateEnum.WAIT_IMG_VALUATE.getCode());
List<ConsignSale> waitConfirmList = consignSaleDao.findImgValuateConfirmOrdersByPage(imgValuateRequestDto);
for (ConsignSale consignSale : waitConfirmList) {
//查询图文估价的时间
ConsignSaleRecord consignSaleRecord = consignSaleRecordDao.findByType(consignSale.getSaleId(), ConsignSaleEnum.OperateTypeEnum.WAIT_USER_CONFIRM_VALUATE.getCode());
Date startTime = consignSaleRecord.getCreateTime();
Date endTime = new Date();
long diffInMillies = Math.abs(endTime.getTime() - startTime.getTime());
long diffInHours = diffInMillies / (60 * 60 * 1000);
if (diffInHours >= 24) {
//超时未确认取消
ConsignSaleRequestDto consignSaleRequestDto = new ConsignSaleRequestDto();
consignSaleRequestDto.setSaleId(consignSale.getSaleId());
timeOutForCancel(consignSaleRequestDto);
logger.info(">>>>>> 查询寄售单列表,检测到寄售单号:{} 图文估价超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<", consignSale.getSaleId());
}
}
//查询实物鉴定待用户确认的订单
ConsignSaleRequestDto identifyRequestDto = new ConsignSaleRequestDto();
identifyRequestDto.setSystemState(ConsignSaleEnum.SaleForSysStateEnum.IDENTIFY.getCode());
List<ConsignSale> waitIdentifyConfirmList = consignSaleDao.findValuateConfirmOrdersByPage(identifyRequestDto);
for (ConsignSale consignSale : waitIdentifyConfirmList) {
//查询实物鉴定的时间
ConsignSaleRecord consignSaleRecord = consignSaleRecordDao.findByType(consignSale.getSaleId(), ConsignSaleEnum.OperateTypeEnum.WAIT_USER_CONFIRM_IDENTIFY.getCode());
Date startTime = consignSaleRecord.getCreateTime();
Date endTime = new Date();
long diffInMillies = Math.abs(endTime.getTime() - startTime.getTime());
long diffInHours = diffInMillies / (60 * 60 * 1000);
if (diffInHours >= 24) {
//超时未确认取消
ConsignSaleRequestDto consignSaleRequestDto = new ConsignSaleRequestDto();
consignSaleRequestDto.setSaleId(consignSale.getSaleId());
timeOutForCancel(consignSaleRequestDto);
logger.info(">>>>>> 查询寄售单列表,检测到寄售单号:{} 实物鉴定超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<", consignSale.getSaleId());
}
}
}
@Transactional
public Result timeOutForCancel(ConsignSaleRequestDto dto) {
try {
ConsignSale consignSale = new ConsignSale();
consignSale.setSaleId(dto.getSaleId());
consignSale.setCustomState(ConsignSaleEnum.SaleForUserStateEnum.CANCEL.getCode());
consignSale.setSystemState(ConsignSaleEnum.SaleForSysStateEnum.CANCEL.getCode());
consignSaleDao.update(consignSale);
//用户超时未确认,取消寄售单
consignSaleRecordDao.insert(dto.getSaleId(), "超时未确认,取消寄售", ConsignSaleEnum.OperateTypeEnum.TIME_OUT_CANCEL.getCode(), null);
return Result.success();
} catch (Exception e) {
logger.error("用户超时未确认,取消寄售单 error : {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return Result.failed();
}
}
......@@ -27,4 +27,12 @@ public interface ConsignSaleRecordDao {
* @return
*/
List<ConsignSaleRecord> find(String saleId);
/**
* 根据操作类型查询记录
* @param saleId
* @return
*/
ConsignSaleRecord findByType(String saleId, int type);
}
......@@ -86,7 +86,7 @@ public class ConsignSaleDaoImpl implements ConsignSaleDao {
ConsignSaleExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getUserId(), criteria::andUserIdEqualTo);
criteria.andSystemStateEqualTo(dto.getSystemState());
criteria.andImgValuationIsNotNull();
criteria.andValuationIsNotNull();
example.orderBy(" sale_time asc");
PageHelper.startPage(dto.getPage(), dto.getLimit());
return consignSaleMapper.selectByExample(example);
......
......@@ -48,6 +48,15 @@ public class ConsignSaleRecordDaoImpl implements ConsignSaleRecordDao {
return consignSaleRecordMapper.selectByExample(example);
}
@Override
public ConsignSaleRecord findByType(String saleId, int type) {
ConsignSaleRecordExample example = new ConsignSaleRecordExample();
ConsignSaleRecordExample.Criteria criteria = example.createCriteria();
criteria.andSaleIdEqualTo(saleId);
criteria.andTypeEqualTo(type);
return consignSaleRecordMapper.selectOneByExample(example);
}
}
......@@ -128,6 +128,46 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
@Override
public Result findList(ConsignSaleRequestDto dto) {
try {
//检查是否有超时未确认的寄售单,更新寄售单状态
//查询图文鉴定后待用户确认的订单
ConsignSaleRequestDto imgValuateConfirmOrderDto = new ConsignSaleRequestDto();
imgValuateConfirmOrderDto.setUserId(dto.getUserId());
imgValuateConfirmOrderDto.setSystemState(ConsignSaleEnum.SaleForSysStateEnum.WAIT_IMG_VALUATE.getCode());
List<ConsignSale> waitConfirmList = consignSaleDao.findImgValuateConfirmOrdersByPage(imgValuateConfirmOrderDto);
for (ConsignSale consignSale : waitConfirmList) {
//查询图文估价的时间
ConsignSaleRecord consignSaleRecord = consignSaleRecordDao.findByType(consignSale.getSaleId(), ConsignSaleEnum.OperateTypeEnum.WAIT_USER_CONFIRM_VALUATE.getCode());
Date startTime = consignSaleRecord.getCreateTime();
Date endTime = new Date();
long diffInMillies = Math.abs(endTime.getTime() - startTime.getTime());
long diffInHours = diffInMillies / (60 * 60 * 1000);
if (diffInHours >= 24) {
//超时未确认取消
timeOutForCancel(dto);
logger.info(">>>>>> 查询寄售单列表,检测到寄售单号:{} 图文估价超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<", consignSale.getSaleId());
}
}
//查询实物鉴定后待用户确认的订单
ConsignSaleRequestDto identifyConfirmOrderDto = new ConsignSaleRequestDto();
identifyConfirmOrderDto.setUserId(dto.getUserId());
identifyConfirmOrderDto.setSystemState(ConsignSaleEnum.SaleForSysStateEnum.IDENTIFY.getCode());
List<ConsignSale> waitIdentifyConfirmList = consignSaleDao.findValuateConfirmOrdersByPage(identifyConfirmOrderDto);
for (ConsignSale consignSale : waitIdentifyConfirmList) {
//查询实物鉴定的时间
ConsignSaleRecord consignSaleRecord = consignSaleRecordDao.findByType(consignSale.getSaleId(), ConsignSaleEnum.OperateTypeEnum.WAIT_USER_CONFIRM_IDENTIFY.getCode());
Date startTime = consignSaleRecord.getCreateTime();
Date endTime = new Date();
long diffInMillies = Math.abs(endTime.getTime() - startTime.getTime());
long diffInHours = diffInMillies / (60 * 60 * 1000);
if (diffInHours >= 24) {
//超时未确认取消
timeOutForCancel(dto);
logger.info(">>>>>> 查询寄售单列表,检测到寄售单号:{} 实物鉴定超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<", consignSale.getSaleId());
}
}
if (StringUtils.hasLength(dto.getSearchParam())) {
//判断查询条件是否为中文,是的话就根据商品名称模糊查询
if (RegexUtil.isContainChinese(dto.getSearchParam())) {
......
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