Kaynağa Gözat

新增病历引用表信息

gaodm 5 yıl önce
ebeveyn
işleme
f70fcb1923

+ 4 - 3
tran-service/src/main/java/com/diagbot/facade/PatientInfoDjFacade.java

@@ -14,7 +14,7 @@ import com.diagbot.enums.VisibleIdTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.ServiceErrorCode;
-import com.diagbot.idc.VisibleIdCreater;
+import com.diagbot.idc.VisibleIdShortCreater;
 import com.diagbot.service.DoctorInfoService;
 import com.diagbot.service.HospitalDeptService;
 import com.diagbot.service.impl.PatientInfoServiceImpl;
@@ -56,6 +56,8 @@ public class PatientInfoDjFacade extends PatientInfoServiceImpl {
     private DoctorInfoService doctorInfoService;
     @Autowired
     private SysSetFacade sysSetFacade;
+    @Autowired
+    private VisibleIdShortCreater visibleIdShortCreater;
 
     /**
      * 对接-页面顶部病人医生科室信息——查询
@@ -182,8 +184,7 @@ public class PatientInfoDjFacade extends PatientInfoServiceImpl {
             patientInfo.setSex(IdCard.getGenderByIdCard(signInVO.getPatientInfo()));
             patientInfo.setBirthday(DateUtil.parseDate(IdCard.getBirthByIdCard(signInVO.getPatientInfo()), "yyyyMMdd"));
 
-            VisibleIdCreater visibleIdCreater = new VisibleIdCreater(0, 0);
-            patientInfo.setCode("" + visibleIdCreater.getNextId(VisibleIdTypeEnum.PATIENT_NO.getKey()));
+            patientInfo.setCode("" + visibleIdShortCreater.getNextId(VisibleIdTypeEnum.PATIENT_NO.getKey()));
             patientInfo.setRemark("1");//自动生成标志
 
             save(patientInfo);

+ 69 - 0
tran-service/src/main/java/com/diagbot/idc/VisibleIdShortCreater.java

@@ -0,0 +1,69 @@
+package com.diagbot.idc;
+
+import com.diagbot.util.DateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.util.Calendar;
+
+/**
+ * @Description: 可见id每秒递增
+ * @author: gaodm
+ * @time: 2018/9/5 10:45
+ */
+@Slf4j
+public class VisibleIdShortCreater extends AbstractIdCreater<Integer> {
+
+    private long lastTimestamp = -1L;
+
+    private long sequence = 0L;
+    private long sequenceMask = 9999;
+
+    public VisibleIdShortCreater(int machineId, int dataCenterId) {
+        super(machineId, dataCenterId);
+    }
+
+    @Override
+    /**
+     *  对外id生成规则
+     *  1809051234550001
+     *  180905 - 12345 -  1  - 0001
+     *   日期 -  秒数  - 业务 - 秒内自增
+     *  @param type 业务id 1.订单 2.交易 3.退款
+     *  @return 生成的id
+     */
+    public synchronized Long getNextId(Integer type) {
+
+        Calendar calendar = Calendar.getInstance();
+
+        long timestamp = timeGen() / 1000;
+
+        if (timestamp < lastTimestamp) {
+            log.error(String.format("clock is moving backwards. Rejecting requests until %d.", lastTimestamp));
+            throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+        }
+
+        if (lastTimestamp == timestamp) {
+            sequence = (sequence + 1);
+            if (sequence > sequenceMask) {
+                //timestamp = tilNextMillis(lastTimestamp);
+                log.error(String.format("id creater sequence is full. wait to next time"));
+                return null;
+            }
+        } else {
+            sequence = getNewSequence();
+        }
+
+        lastTimestamp = timestamp;
+
+        String date = DateUtil.format(calendar.getTime(), "yyMMdd");
+        long seconds = DateUtils.getFragmentInSeconds(calendar, Calendar.DAY_OF_YEAR);
+
+        return Long.valueOf(date + String.format("%05d", seconds) + String.valueOf(type) + sequence);
+    }
+
+    private long getNewSequence() {
+        return RandomUtils.nextInt(1000, 2000);
+    }
+}