@@ -0,0 +1,69 @@ | |||
package com.qtzl.alterSales.dao.entity.second; | |||
import com.qtzl.alterSales.manager.enums.AflCancelOrderStateEnum; | |||
import com.txffp.api.core.dao.entity.AbstractInsertTimeEntity; | |||
import javax.persistence.Column; | |||
import javax.persistence.Entity; | |||
import javax.persistence.Table; | |||
/*** | |||
* <p> | |||
* 路网过户或取消订单后记录; | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 14:33 | |||
**/ | |||
@Entity | |||
@Table(name = "AFL_CANCEL_ORDER") | |||
public class AflCancelOrder extends AbstractInsertTimeEntity { | |||
/*** 车牌号 */ | |||
private String plateNum; | |||
/*** 车牌颜色 */ | |||
private Integer plateColor; | |||
/*** 处理状态 */ | |||
private AflCancelOrderStateEnum state; | |||
public AflCancelOrder() { | |||
} | |||
public AflCancelOrder(String plateNum, Integer plateColor, AflCancelOrderStateEnum state) { | |||
this.plateNum = plateNum; | |||
this.plateColor = plateColor; | |||
this.state = state; | |||
} | |||
/*** 车牌号 */ | |||
@Column(name = "PLATE_NUM") | |||
public String getPlateNum() { | |||
return this.plateNum; | |||
} | |||
/*** 车牌号 */ | |||
public void setPlateNum(String plateNum) { | |||
this.plateNum = plateNum; | |||
} | |||
/*** 车牌颜色 */ | |||
@Column(name = "PLATE_COLOR") | |||
public Integer getPlateColor() { | |||
return this.plateColor; | |||
} | |||
/*** 车牌颜色 */ | |||
public void setPlateColor(Integer plateColor) { | |||
this.plateColor = plateColor; | |||
} | |||
/*** 处理状态 */ | |||
@Column(name = "STATE") | |||
public AflCancelOrderStateEnum getState() { | |||
return this.state; | |||
} | |||
/*** 处理状态 */ | |||
public void setState(AflCancelOrderStateEnum state) { | |||
this.state = state; | |||
} | |||
} |
@@ -77,7 +77,7 @@ public class EtcApplyOrder extends StringUUIDEntity { | |||
private String applyer; | |||
private Integer applySourceType; | |||
private Date createTime; | |||
private Date upDate; | |||
private Date updateTime; | |||
@Column(name = "orderNo") | |||
public String getOrderNo() { | |||
@@ -369,9 +369,9 @@ public class EtcApplyOrder extends StringUUIDEntity { | |||
return createTime; | |||
} | |||
@Column(name = "upDate") | |||
public Date getUpDate() { | |||
return upDate; | |||
@Column(name = "updateTime") | |||
public Date getUpdateTime() { | |||
return updateTime; | |||
} | |||
public void setOrderNo(String orderNo) { | |||
@@ -606,7 +606,7 @@ public class EtcApplyOrder extends StringUUIDEntity { | |||
this.createTime = createTime; | |||
} | |||
public void setUpDate(Date upDate) { | |||
this.upDate = upDate; | |||
public void setUpdateTime(Date updateTime) { | |||
this.updateTime = updateTime; | |||
} | |||
} |
@@ -0,0 +1,81 @@ | |||
package com.qtzl.alterSales.dao.entity.third; | |||
import cn.com.taiji.common.entity.StringUUIDEntity; | |||
import javax.persistence.Column; | |||
import javax.persistence.Entity; | |||
import javax.persistence.Table; | |||
import java.util.Date; | |||
/*** | |||
* <p> | |||
* | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 18:16 | |||
**/ | |||
@Entity | |||
@Table(name = "etc_order_no_regist") | |||
public class EtcOrderNoRegist extends StringUUIDEntity { | |||
private String vehiclePlate; | |||
private Integer vehiclePlateColor; | |||
private Integer orderType; | |||
private String orderNo; | |||
private String orgCode; | |||
private Date createTime; | |||
@Column(name = "vehiclePlate") | |||
public String getVehiclePlate() { | |||
return vehiclePlate; | |||
} | |||
public void setVehiclePlate(String vehiclePlate) { | |||
this.vehiclePlate = vehiclePlate; | |||
} | |||
@Column(name = "vehiclePlateColor") | |||
public Integer getVehiclePlateColor() { | |||
return vehiclePlateColor; | |||
} | |||
public void setVehiclePlateColor(Integer vehiclePlateColor) { | |||
this.vehiclePlateColor = vehiclePlateColor; | |||
} | |||
@Column(name = "orderType") | |||
public Integer getOrderType() { | |||
return orderType; | |||
} | |||
public void setOrderType(Integer orderType) { | |||
this.orderType = orderType; | |||
} | |||
@Column(name = "orderNo") | |||
public String getOrderNo() { | |||
return orderNo; | |||
} | |||
public void setOrderNo(String orderNo) { | |||
this.orderNo = orderNo; | |||
} | |||
@Column(name = "orgCode") | |||
public String getOrgCode() { | |||
return orgCode; | |||
} | |||
public void setOrgCode(String orgCode) { | |||
this.orgCode = orgCode; | |||
} | |||
@Column(name = "createTime") | |||
public Date getCreateTime() { | |||
return createTime; | |||
} | |||
public void setCreateTime(Date createTime) { | |||
this.createTime = createTime; | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
package com.qtzl.alterSales.dao.repo.jpa.second; | |||
import com.qtzl.alterSales.dao.entity.second.AflCancelOrder; | |||
import org.springframework.data.jpa.repository.JpaRepository; | |||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; | |||
/*** | |||
* <p> | |||
* | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 14:42 | |||
**/ | |||
public interface AflCancelOrderRepo extends JpaRepository<AflCancelOrder, String>, JpaSpecificationExecutor<AflCancelOrder> { | |||
} |
@@ -2,6 +2,11 @@ package com.qtzl.alterSales.dao.repo.jpa.third; | |||
import com.qtzl.alterSales.dao.entity.third.EtcApplyOrder; | |||
import org.springframework.data.jpa.repository.JpaRepository; | |||
import org.springframework.data.jpa.repository.Query; | |||
import java.time.LocalDateTime; | |||
import java.util.Date; | |||
import java.util.List; | |||
/*** | |||
* <p> | |||
@@ -12,4 +17,15 @@ import org.springframework.data.jpa.repository.JpaRepository; | |||
**/ | |||
public interface EtcApplyOrderRepo extends JpaRepository<EtcApplyOrder, String> { | |||
/*** | |||
* 根据车牌号、车牌颜色。查询订单 | |||
* @param orderId 订单ID | |||
* @param maxDate 最大时间 | |||
* @return 、 | |||
*/ | |||
@Query(" FROM EtcApplyOrder WHERE id in(?1) AND sealedStatus = 0 AND createTime<?2") | |||
List<EtcApplyOrder> findByPlateNumAndPlateColor(List<String> orderId, Date maxDate); | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.qtzl.alterSales.dao.repo.jpa.third; | |||
import com.qtzl.alterSales.dao.entity.third.EtcOrderNoRegist; | |||
import org.springframework.data.jpa.repository.JpaRepository; | |||
import org.springframework.data.jpa.repository.Query; | |||
import java.util.List; | |||
/*** | |||
* <p> | |||
* | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 18:20 | |||
**/ | |||
public interface EtcOrderNoRegistRepo extends JpaRepository<EtcOrderNoRegist, String> { | |||
/*** | |||
* 根據车牌号、车牌颜色查询注册表 | |||
* @param vehiclePlate 车牌号 | |||
* @param plateColor 车牌颜色 | |||
* @return 、 | |||
*/ | |||
@Query("FROM EtcOrderNoRegist WHERE vehiclePlate=?1 AND vehiclePlateColor=?2") | |||
List<EtcOrderNoRegist> findByVehiclePlateAndVehiclePlateColor(String vehiclePlate, Integer plateColor); | |||
} |
@@ -24,6 +24,14 @@ public interface EtcOrderVehicleInfoRepo extends JpaRepository<EtcOrderVehicleIn | |||
*/ | |||
List<EtcOrderVehicleInfo> findByVehicleId(String vehicleId); | |||
/*** | |||
* 根据车辆ID查询订单ID | |||
* @param vehicleId 车辆ID | |||
* @return 、 | |||
*/ | |||
@Query("SELECT applyOrderId FROM EtcOrderVehicleInfo WHERE vehicleId =?1") | |||
List<String> getOrderId(String vehicleId); | |||
/*** | |||
* 查询比亚迪车辆、订单信息 | |||
* @param startTime 开始时间 |
@@ -0,0 +1,35 @@ | |||
package com.qtzl.alterSales.manager.enums; | |||
/*** | |||
* <p> | |||
* 订单取消处理状态 枚举 | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 14:35 | |||
**/ | |||
public enum AflCancelOrderStateEnum { | |||
/*** | |||
* 枚举具体描述 | |||
**/ | |||
PENDING_PROCESSING("PENDING_PROCESSING", "待处理"), | |||
SUCCESS("SUCCESS", "处理成功"), | |||
FAIL("FAIL", "处理失败"), | |||
; | |||
private final String code; | |||
private final String type; | |||
AflCancelOrderStateEnum(String code, String type) { | |||
this.code = code; | |||
this.type = type; | |||
} | |||
public String getCode() { | |||
return this.code; | |||
} | |||
public String getType() { | |||
return this.type; | |||
} | |||
} |
@@ -0,0 +1,52 @@ | |||
package com.qtzl.alterSales.manager.quartz; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import com.qtzl.alterSales.dao.entity.second.AflCancelOrder; | |||
import com.qtzl.alterSales.dao.repo.jpa.second.AflCancelOrderRepo; | |||
import com.qtzl.alterSales.manager.enums.AflCancelOrderStateEnum; | |||
import com.qtzl.alterSales.manager.service.AflCancelOrderService; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.scheduling.annotation.Scheduled; | |||
import org.springframework.stereotype.Component; | |||
import javax.annotation.Resource; | |||
import java.util.List; | |||
/*** | |||
* <p> | |||
* 用户在中国ETC小程序进行过户、取消订单后,经路网客服审核通过后,根据每日下载的增量数据判断进行本地订单的处理 | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 18:24 | |||
**/ | |||
@Component | |||
public class AflCancelOrderTask extends AbstractManager { | |||
private static final Logger log = LoggerFactory.getLogger(AflCancelOrderTask.class); | |||
@Resource | |||
private AflCancelOrderService aflCancelOrderService; | |||
@Resource | |||
private AflCancelOrderRepo aflCancelOrderRepo; | |||
@Scheduled(cron = "0 0/10 8-11 * * ?") | |||
// @Scheduled(cron = "0/2 * * * * ?") | |||
public void dashboardBatchSync() { | |||
final List<AflCancelOrder> cancelOrderList = aflCancelOrderRepo.findAll((root, query, cb) -> query.where( | |||
cb.notEqual(root.<AflCancelOrderStateEnum>get("state"), AflCancelOrderStateEnum.SUCCESS) | |||
).getRestriction()); | |||
log.info("中国ETC小程序过户、取消订单本地订单处理。本次处理条数:{}", cancelOrderList.size()); | |||
for (AflCancelOrder cancelOrder : cancelOrderList) { | |||
try { | |||
aflCancelOrderService.cancelOrder(cancelOrder); | |||
cancelOrder.setState(AflCancelOrderStateEnum.SUCCESS); | |||
} catch (Exception e) { | |||
log.info("中国ETC小程序过户、取消订单本地订单处理失败。车牌号:{}, 车牌颜色:{}, 错误信息:{}", cancelOrder.getPlateNum(), cancelOrder.getPlateColor(), e.getMessage()); | |||
cancelOrder.setState(AflCancelOrderStateEnum.FAIL); | |||
} | |||
aflCancelOrderRepo.save(cancelOrder); | |||
} | |||
log.info("中国ETC小程序过户、取消订单本地订单处理完成"); | |||
} | |||
} |
@@ -27,7 +27,7 @@ public class BydDashboardBatchDataGenerateTask extends AbstractManager { | |||
@Resource | |||
private BydService bydService; | |||
@Scheduled(cron = "0 30 0-3 * * ?") | |||
@Scheduled(cron = "0 0/30 0-3 * * ?") | |||
public void dashboardBatchSync() { | |||
// | |||
final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
@@ -0,0 +1,21 @@ | |||
package com.qtzl.alterSales.manager.service; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import com.qtzl.alterSales.dao.entity.second.AflCancelOrder; | |||
/*** | |||
* <p> | |||
* 取消订单车辆处理 | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 17:09 | |||
**/ | |||
public interface AflCancelOrderService { | |||
/*** | |||
* 取消订单处理 | |||
* @param aflCancelOrder \ | |||
*/ | |||
void cancelOrder(AflCancelOrder aflCancelOrder); | |||
} |
@@ -0,0 +1,60 @@ | |||
package com.qtzl.alterSales.manager.service; | |||
import com.qtzl.alterSales.dao.entity.second.AflCancelOrder; | |||
import com.qtzl.alterSales.dao.entity.third.EtcApplyOrder; | |||
import com.qtzl.alterSales.dao.entity.third.EtcOrderNoRegist; | |||
import com.qtzl.alterSales.dao.repo.jpa.third.EtcApplyOrderRepo; | |||
import com.qtzl.alterSales.dao.repo.jpa.third.EtcOrderNoRegistRepo; | |||
import com.qtzl.alterSales.dao.repo.jpa.third.EtcOrderVehicleInfoRepo; | |||
import com.qtzl.alterSales.manager.tools.DateTools; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.util.CollectionUtils; | |||
import javax.annotation.Resource; | |||
import java.util.Date; | |||
import java.util.List; | |||
/*** | |||
* <p> | |||
* | |||
* </p> | |||
* @author hou yi | |||
* {@code @date} 2024/3/29 17:28 | |||
**/ | |||
@Service | |||
public class AflCancelOrderServiceImpl implements AflCancelOrderService { | |||
private static final Logger log = LoggerFactory.getLogger(AflCancelOrderServiceImpl.class); | |||
@Resource | |||
private EtcApplyOrderRepo etcApplyOrderRepo; | |||
@Resource | |||
private EtcOrderNoRegistRepo etcOrderNoRegistRepo; | |||
@Resource | |||
private EtcOrderVehicleInfoRepo etcOrderVehicleInfoRepo; | |||
@Override | |||
public void cancelOrder(AflCancelOrder aflCancelOrder) { | |||
// | |||
final List<String> orderId = etcOrderVehicleInfoRepo.getOrderId(aflCancelOrder.getPlateNum() + "_" + aflCancelOrder.getPlateColor()); | |||
if (CollectionUtils.isEmpty(orderId)){ | |||
log.info("未查询到订单对应车辆信息,车牌号:{}, 车牌颜色:{}", aflCancelOrder.getPlateNum(), aflCancelOrder.getPlateColor()); | |||
return; | |||
} | |||
final List<EtcApplyOrder> applyOrders = etcApplyOrderRepo.findByPlateNumAndPlateColor(orderId, DateTools.getDate(aflCancelOrder.getInsertTime())); | |||
if (!CollectionUtils.isEmpty(applyOrders)) { | |||
applyOrders.forEach(vo -> vo.setSealedStatus(1)); | |||
etcApplyOrderRepo.saveAll(applyOrders); | |||
return; | |||
} | |||
// 处理注册表 | |||
final List<EtcOrderNoRegist> orderNoRegist = etcOrderNoRegistRepo.findByVehiclePlateAndVehiclePlateColor(aflCancelOrder.getPlateNum(), aflCancelOrder.getPlateColor()); | |||
if (!CollectionUtils.isEmpty(orderNoRegist)) { | |||
etcOrderNoRegistRepo.deleteAll(orderNoRegist); | |||
} | |||
} | |||
} |
@@ -6,6 +6,7 @@ import com.qtzl.alterSales.dao.entity.second.AflBydDashboard; | |||
import com.qtzl.alterSales.dao.repo.jpa.second.AflBydDashboardRepo; | |||
import com.qtzl.alterSales.dao.repo.jpa.third.EtcOrderVehicleInfoRepo; | |||
import com.qtzl.alterSales.manager.enums.AflBydDashboardPushStateEnum; | |||
import com.qtzl.alterSales.manager.quartz.AflCancelOrderTask; | |||
import com.qtzl.alterSales.manager.service.AflBydDashboardService; | |||
import com.qtzl.alterSales.manager.service.byd.BydService; | |||
import com.qtzl.alterSales.manager.service.byd.vo.BydDashBoardResponse; | |||
@@ -41,6 +42,13 @@ public class SaleTest { | |||
private AflBydDashboardRepo aflBydDashboardRepo; | |||
@Resource | |||
private AflBydDashboardService aflBydDashboardService; | |||
@Resource | |||
private AflCancelOrderTask aflCancelOrderTask; | |||
@Test | |||
public void cancel(){ | |||
aflCancelOrderTask.dashboardBatchSync(); | |||
} | |||
@Test | |||
public void orderVehicleQuery() throws ParseException { |