[fea]
[核销次数校验]
This commit is contained in:
yangyakun
2024-11-19 19:08:13 +08:00
parent 6e2a9df424
commit 21003a1a8c
5 changed files with 44 additions and 45 deletions

View File

@@ -71,21 +71,21 @@ data class WriteOffMsg(
) : BaseDPMsg(DPMsgType.TYPE_WRITEOFF_INFO.type)
data class WriteOffDetialMsg(
val code:Int,
val msg:String?,
val expiryTime: Long?=null,
val bookingTime: Long?=null,
val lineId: Long?=null,
val availableTimes: Int?=null,//剩余票数
val orderNo: String?=null,
val uid: String?=null,
val phone: String?=null,
val ticketSize: Int?=null,
val ticketName: String?=null,
val typeBiz: String?=null,
val pipe:String?=null,
val startStationId:Long?=null,
val tenantId:Long?=null
val code:Int, // 0 乘客端参加校验成功 给司机屏 3001 乘客屏校验失败
val msg:String?,// code 非0时具体错误信息
val expiryTime: Long?=null, // 二维码有效期
val bookingTime: Long?=null,// 预定时间
val lineId: Long?=null, // 线路id
val availableTimes: Int?=null,//票数
val orderNo: String?=null, // 订单Id
val uid: String?=null,// 服务器端唯一码
val phone: String?=null,// 手机号码
val ticketSize: Int?=null,// 票上几个人
val ticketName: String?=null,// 票的名称
val typeBiz: String?=null,//bus shuttle
val pipe:String?=null,// 渠道ehsafety mogogosafety
val startStationId:Long?=null,// 开始站点名称
val tenantId:Long?=null// 租户id
) : BaseDPMsg(DPMsgType.TYPE_WRITEOFF_INFO_DETAIL.type)

View File

@@ -193,10 +193,9 @@ object TicketModel {
1009 -> sendMessage2Driver("车票所选乘车日期非今日", phone,1009)
1005 -> sendMessage2Driver("车辆未登录、或没有任务", phone,1005)
1006 -> sendMessage2Driver("车票路线信息与当前车辆执行任务的路线信息不符合", phone,1006)
1008 -> sendMessage2Driver("车票剩余可用次数为0", phone,1008)
1008 -> sendMessage2Driver("车票剩余可用次数为0", phone,99)
6001 -> sendMessage2Driver("二维码已过期", phone,6001)
1012 -> sendMessage2Driver("当前用户下单路线非当前的车辆所属公司", phone,1012)
99 -> sendMessage2Driver("已核验、请勿重新核验", phone,99)
else -> {
try {
val tempcode=msg.toInt()

View File

@@ -19,7 +19,7 @@ interface WriteOffDataDao {
@Delete
fun delete(vararg eventDataBean: WriteOffDataBean)
@Query("SELECT * FROM ${WriteOffDataBean.writeoffDataTable} WHERE event_save_time > :zeroTime and order_no = :orderNo")
@Query("SELECT * FROM ${WriteOffDataBean.writeoffDataTable} WHERE event_save_time > :zeroTime and order_no = :orderNo order by event_save_time")
fun queryWriteOffByOrderNo(zeroTime: Long = DateTimeUtil.getCurrentDateZero(),orderNo:String): List<WriteOffDataBean>?
@Query("SELECT * FROM ${WriteOffDataBean.writeoffDataTable} WHERE event_save_time > :zeroTime and task_id = :taskId and update_status = ${WriteOffDataBean.notUpdate}")

View File

@@ -28,12 +28,9 @@ object WriteOffDb: IDbRepository {
}
fun queryWaitUpdateEventCount(orderNo:String): WriteOffDataBean?{
fun queryWaitUpdateEventCount(orderNo:String): List<WriteOffDataBean>? {
val queryWriteOffByOrderNo = writeOffDataDao?.queryWriteOffByOrderNo(orderNo = orderNo)
if(!queryWriteOffByOrderNo.isNullOrEmpty()){
return queryWriteOffByOrderNo.last()
}
return null
return queryWriteOffByOrderNo
}
fun queryWaitUpdateEvent(): List<WriteOffDataBean>? {

View File

@@ -129,33 +129,36 @@ class WriteOffCacheRepository : IWriteOffRepository {
}else{
throw DataException(1006,"车票路线信息与当前车辆执行任务的路线信息不符合")
}
if(AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
if (!it.orderNo.isNullOrEmpty()) {
val lastWriteOff = WriteOffDb.queryWaitUpdateEventCount(it.orderNo!!)
// 7、校验次数
if((it.availableTimes?:0)<=0){
throw DataException(1008,"车票剩余可用次数为0")
if ((it.availableTimes ?: 0) >= (lastWriteOff?.size ?: 0)) {
throw DataException(1008, "车票剩余可用次数为0")
}
// 8、同一个订单2分钟内只能核销一次
if (!it.orderNo.isNullOrEmpty()) {
val lastWriteOff = WriteOffDb.queryWaitUpdateEventCount(it.orderNo!!)
if(lastWriteOff!=null){
if(System.currentTimeMillis()-lastWriteOff.eventSaveTime<=120_000){
throw DataException(6002,"同一订单核销间隔时间需大于2分钟")
if (AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) {
// 8、同一个订单2分钟内只能核销一次
if (lastWriteOff != null && lastWriteOff.size > 0) {
if (System.currentTimeMillis() - lastWriteOff.last().eventSaveTime <= 120_000) {
throw DataException(6002, "同一订单核销间隔时间需大于2分钟")
}
}
}else{
throw DataException(11000,"缺少orderNo")
}
val (start, _) = LineManager.getStations()
siteId = start?.siteId?.toLong()?:0
}else if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
// 7、校验起始站点
val (start, _) = LineManager.getStations()
if(start?.siteId?.toLong()==it.startStationId){
siteId = it.startStationId
}else{
throw DataException(1006,"车票站点信息与当前车辆执行任务的站点信息不符合")
val (start, _) = LineManager.getStations()
siteId = start?.siteId?.toLong() ?: 0
} else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
// 8、校验起始站点
val (start, _) = LineManager.getStations()
if (start?.siteId?.toLong() == it.startStationId) {
siteId = it.startStationId
} else {
throw DataException(
1006,
"车票站点信息与当前车辆执行任务的站点信息不符合"
)
}
}
} else {
throw DataException(11000, "缺少orderNo")
}
val addWrite = WriteOffDataBean()