String key = "opsBatchNo:" + batchNo; boolean result = redisTemplate.opsForValue().setIfAbsent(key, batchNo); // 设置3天失效 redisTemplate.expire(key, 3, TimeUnit.DAYS); if (!result) { // key已存在,返回幂等性校验失败的结果 return new ResponseDTO(5002,"该批次号已处理,请更新批号后发送"); }
时间: 2024-02-14 18:32:58 浏览: 142
这段代码的作用是在 Redis 中存储一个键值对,其中键为字符串 "opsBatchNo:" + batchNo,值为 batchNo。如果该键在 Redis 中不存在,则将该键值对设置为 Redis 中的值,并且设置该键的过期时间为 3 天。如果该键在 Redis 中已经存在,则返回一个幂等性校验失败的结果,表示该批次号已经处理过了,需要更新批号后发送。在这个过程中,该代码使用了 RedisTemplate 的 setIfAbsent() 方法来实现在 Redis 中设置一个键值对,使用 expire() 方法来设置该键的过期时间。
相关问题
优化SQL SELECT * FROM pbiweb_pbi_user_of_offering WHERE role_id = '437-00024678' and offering_id = '22188417' AND batchno = SELECT MAX(batchno) FROM pbiweb_pbi_user_of_offering WHERE role_id = '437-00024678' and offering _id = '22188417') ORDER BY LAST_UPDATE_DATE ASC;
可以考虑优化这条 SQL 语句,以提高查询效率。在这个 SQL 语句中,有一个子查询,可以使用 JOIN 语句来代替子查询,从而减少查询次数,提高查询性能。以下是优化后的 SQL 语句:
```
SELECT *
FROM pbiweb_pbi_user_of_offering uoo
JOIN (
SELECT MAX(batchno) AS max_batchno
FROM pbiweb_pbi_user_of_offering
WHERE role_id = '437-00024678' AND offering_id = '22188417'
) uo ON uoo.batchno = uo.max_batchno
WHERE uoo.role_id = '437-00024678' AND uoo.offering_id = '22188417'
ORDER BY uoo.LAST_UPDATE_DATE ASC;
```
优化后的 SQL 语句使用了 JOIN 语句来代替子查询。它将子查询查询出的最大 batchno 作为一个临时表,通过 JOIN 语句和原表进行关联,从而得到符合条件的记录。这样一来,查询次数就减少了,查询效率也得到了提高。
SELECT CONVERT(varchar(100), A.CREATED, 23) ddate, (select Top 1 PubDefStr1 from M_F_RDS10 WHERE BatchNo=MATERIALLOT) pbs1, MATERIALLOT lot,a.MATERIAL_ID materialid,B.CODE materialcode,B.NAME materialname,C.CODE storagecode, C.NAME storagename,cast(a.Qty as float) QTY, (select Top 1 Z2.NAME from M_F_RDS01 Z LEFT JOIN M_F_RD01 Z1 ON Z.RD01_ID=Z1.ID LEFT JOIN M_V_VENDOR Z2 ON Z1.VENDOR_ID=Z2.ID WHERE Z.PUBDEFSTR1=MATERIALLOT and z.MATERIAL_ID=b.id and z.STORAGE_ID=c.id) vendorname, (SELECT ISNULL(SUM(ISNULL(D00.HAD,0)),0) FROM InventoryOccupancy D00 WHERE A.MATERIAL_ID=D00.MATERIAL_ID AND A.STORAGE_ID=D00.STORAGE_ID AND A.MATERIALLOT=D00.BATCHNO ) had FROM M_F_STOCKMATERIAL A LEFT JOIN M_M_MATERIAL B ON A.MATERIAL_ID=B.ID LEFT JOIN M_F_STORAGE C ON A.STORAGE_ID=C.ID
这是一条SQL查询语句,用于从多个数据表中获取一些字段的值。具体来说,它选取了以下字段:
1. A.CREATED:表示某个物料批次的创建日期时间。
2. M_F_RDS10.PubDefStr1:表示某个物料批次的一个公共定义字符串。
3. A.MATERIALLOT:表示某个物料批次的批次号。
4. A.MATERIAL_ID:表示某个物料批次所对应的物料的ID号。
5. B.CODE:表示某个物料的编码。
6. B.NAME:表示某个物料的名称。
7. C.CODE:表示某个存储区的编码。
8. C.NAME:表示某个存储区的名称。
9. A.Qty:表示某个物料批次的数量。
10. M_F_RDS01.Z2.NAME:表示某个物料批次所对应的供应商的名称。
11. InventoryOccupancy.HAD:表示某个物料在某个存储区的已有库存量。
其中,这些字段分别来自于以下数据表:
1. M_F_STOCKMATERIAL:表示物料的批次信息表。
2. M_M_MATERIAL:表示物料信息表。
3. M_F_STORAGE:表示存储区信息表。
4. M_F_RDS10:表示某个物料批次的批次信息表。
5. M_F_RDS01:表示某个物料批次所对应的入库单信息表。
6. M_V_VENDOR:表示供应商信息表。
7. InventoryOccupancy:表示某个物料在某个存储区的库存信息表。
阅读全文