|
|
@@ -1,15 +1,21 @@
|
|
|
package com.uas.platform.b2c.prod.product.common.service.impl;
|
|
|
|
|
|
+import com.uas.platform.b2c.prod.commodity.controller.GoodsController;
|
|
|
import com.uas.platform.b2c.prod.product.common.dao.CreateNumberDao;
|
|
|
import com.uas.platform.b2c.prod.product.common.model.CreateNumber;
|
|
|
import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
|
|
|
import com.uas.platform.b2c.core.utils.DateFormatUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.dao.DataAccessException;
|
|
|
import org.springframework.data.redis.connection.RedisConnection;
|
|
|
import org.springframework.data.redis.core.RedisCallback;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
import java.util.Date;
|
|
|
@@ -26,17 +32,21 @@ public class CreateNumberServiceImpl implements CreateNumberService {
|
|
|
|
|
|
private final RedisTemplate<Serializable,Serializable> redisTemplate;
|
|
|
|
|
|
+ private final JdbcTemplate jdbcTemplate;
|
|
|
+
|
|
|
@Autowired
|
|
|
- public CreateNumberServiceImpl(CreateNumberDao createNumberDao, RedisTemplate redisTemplate) {
|
|
|
+ public CreateNumberServiceImpl(CreateNumberDao createNumberDao, RedisTemplate redisTemplate, JdbcTemplate jdbcTemplate) {
|
|
|
this.createNumberDao = createNumberDao;
|
|
|
this.redisTemplate = redisTemplate;
|
|
|
- }
|
|
|
+ this.jdbcTemplate = jdbcTemplate;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public CreateNumber save(CreateNumber createNumber) {
|
|
|
return createNumberDao.save(createNumber);
|
|
|
}
|
|
|
|
|
|
+ @Transactional(propagation = Propagation.NOT_SUPPORTED)
|
|
|
@Override
|
|
|
public String getTimeNumber(String tbname, int digit, Integer... addNums) {
|
|
|
synchronized (tbname) {
|
|
|
@@ -45,39 +55,60 @@ public class CreateNumberServiceImpl implements CreateNumberService {
|
|
|
while (true) {
|
|
|
if (getDataFromRedis(tbname) == null) {
|
|
|
setDataToRedis(tbname);
|
|
|
- String time = getTime();
|
|
|
- int num;
|
|
|
- CreateNumber createNumber = createNumberDao.findByTbname(tbname);
|
|
|
- if (createNumber == null) {
|
|
|
- createNumber = new CreateNumber();
|
|
|
- createNumber.setTbname(tbname);
|
|
|
- createNumber.setTime(time);
|
|
|
- num = 1;
|
|
|
- } else {
|
|
|
- // 2、检查时间是不是今天
|
|
|
- if (time.equals(createNumber.getTime())) {
|
|
|
- num = createNumber.getNumber() + 1;
|
|
|
- } else {
|
|
|
- num = 1;
|
|
|
- createNumber.setTime(time);
|
|
|
- }
|
|
|
- }
|
|
|
- if (addNums.length > 0) {
|
|
|
- createNumber.setNumber(num + addNums[0] - 1);
|
|
|
- } else {
|
|
|
- createNumber.setNumber(num);
|
|
|
- }
|
|
|
- createNumberDao.save(createNumber);
|
|
|
- redisTemplate.delete(tbname);
|
|
|
- timeNumber = createNumber.getTime() + formatIntToStr(num, digit);
|
|
|
+ timeNumber = getOrderNumber(tbname, digit, addNums);
|
|
|
+ redisTemplate.delete(tbname);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return timeNumber;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 循环取订单号,如果连续取十次,还取不到,就报错误。
|
|
|
+ * @param tnName 表名称
|
|
|
+ * @param digit 数字
|
|
|
+ * @param addNums 预留长度
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getOrderNumber(String tnName, int digit, Integer... addNums) {
|
|
|
+ int times = 0;
|
|
|
+ boolean success = false;
|
|
|
+ String timeNumber = "";
|
|
|
+ while((times < 10) && !success) {
|
|
|
+ String time = getTime();
|
|
|
+ int num = 0;
|
|
|
+ CreateNumber createNumber = createNumberDao.findByTbname(tnName);
|
|
|
+ if (createNumber == null) {
|
|
|
+ num = (addNums.length > 0) ? (num + addNums[0]) : (num + 1);
|
|
|
+ createNumber = new CreateNumber(tnName, time, num + 1);
|
|
|
+ try {
|
|
|
+ createNumberDao.save(createNumber);
|
|
|
+ success = true;
|
|
|
+ timeNumber = time + formatIntToStr(num, digit);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果已经存在createNumber信息
|
|
|
+ Integer originNum = createNumber.getNumber();
|
|
|
+ String originTime = createNumber.getTime();
|
|
|
+ // 2、检查时间是今天,就设置成对应的值
|
|
|
+ num = time.equals(originTime) ? originNum : num;
|
|
|
+ num = (addNums.length > 0) ? (num + addNums[0]) : (num + 1);
|
|
|
+ int update = jdbcTemplate.update("update product$creat_number set cn_time = '" + time + "', cn_number = " + num
|
|
|
+ + " where cn_tbname = '" + tnName + "' and cn_time = '" + originTime + "' and cn_number = " + originNum);
|
|
|
+ if (update == 1) {
|
|
|
+ success = true;
|
|
|
+ timeNumber = time + formatIntToStr(num, digit);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ times++;
|
|
|
+ }
|
|
|
+ return timeNumber;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获得8位时间
|
|
|
*/
|