329 lines
11 KiB
Java
329 lines
11 KiB
Java
package com.tenwa.apzl.comm;
|
||
|
||
import java.text.DecimalFormat;
|
||
import java.util.Calendar;
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
|
||
import jbo.com.tenwa.entity.comm.serialutil.T_SERIAL_DISCARD_NUMBER;
|
||
import jbo.com.tenwa.entity.comm.serialutil.T_SERIAL_NUMBER;
|
||
|
||
import com.amarsoft.are.jbo.BizObject;
|
||
import com.amarsoft.are.jbo.BizObjectManager;
|
||
import com.amarsoft.are.jbo.BizObjectQuery;
|
||
import com.amarsoft.are.jbo.JBOFactory;
|
||
import com.amarsoft.are.jbo.JBOTransaction;
|
||
import com.amarsoft.are.lang.StringX;
|
||
import com.tenwa.comm.util.date.DateAssistant;
|
||
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
|
||
import com.tenwa.util.SerialNumberUtil;
|
||
/**
|
||
* @author 58261
|
||
* ÓÅ»¯ÎҵŤ×÷´ú°ìÏÔʾ
|
||
*
|
||
* */
|
||
public class SeriaNumBerForUtil {
|
||
|
||
public static synchronized String getTiaoXiSerialNumber(JBOTransaction tx) throws Exception{
|
||
return SeriaNumBerForUtil.getSerialNumber("TXLC{year}{maxOrderNumber}",7,null, "TXLC", null, tx);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
protected static synchronized String getSerialNumber(String serialNumberPattern,int numberCount,Map<String,String> model,String type,Integer queryYear,JBOTransaction tx) throws Exception
|
||
{
|
||
String currentDateTime = DateAssistant.getTodayNow();
|
||
String currentYear = currentDateTime.substring(0,4);
|
||
String month = currentDateTime.substring(5,7);
|
||
String day = currentDateTime.substring(8,10);
|
||
String hour = currentDateTime.substring(11,13);
|
||
String minute = currentDateTime.substring(14,16);
|
||
String second = currentDateTime.substring(17,19);
|
||
|
||
Integer year = Integer.parseInt(currentYear);
|
||
if(null != queryYear){
|
||
year = queryYear;
|
||
}
|
||
Map<String,String> paramMap = new HashMap<String,String>();
|
||
paramMap.put("year", year+"");
|
||
paramMap.put("month", month+"");
|
||
paramMap.put("day", day+"");
|
||
paramMap.put("hour", hour+"");
|
||
paramMap.put("minute", minute+"");
|
||
paramMap.put("second", second+"");
|
||
|
||
int maxOrderNumber = getMaxOrderNumber(type, queryYear, tx);
|
||
StringBuffer numberFormat = new StringBuffer();
|
||
for(int i=0;i<numberCount;i++)
|
||
{
|
||
numberFormat.append("0");
|
||
}
|
||
|
||
DecimalFormat df = new DecimalFormat(numberFormat.toString());
|
||
String serialNumberFormat = df.format(maxOrderNumber);
|
||
paramMap.put("maxOrderNumber", serialNumberFormat);
|
||
if(null != model){
|
||
paramMap.putAll(model);
|
||
}
|
||
String serialNumberString = getSerialNumber(paramMap, serialNumberPattern);
|
||
|
||
return serialNumberString;
|
||
}
|
||
protected static synchronized String getSerialNumber(Map<String,String> paramMap,String serialNumberPattern){
|
||
for(String key:paramMap.keySet()){
|
||
if(serialNumberPattern.indexOf("{"+key+"}")>=0){
|
||
serialNumberPattern=serialNumberPattern.replace("{"+key+"}", paramMap.get(key));
|
||
}
|
||
}
|
||
return serialNumberPattern;
|
||
}
|
||
/***
|
||
* serialNumberPatternÆ¥ÅäÖµ
|
||
* {year}->Äê·Ý£¬Èç¹û²ÎÊýyearΪ¿ÕÔòÈ¡µ±Ç°Äê
|
||
* {month}->µ±Ç°ÔÂ
|
||
* {day}->µ±Ç°ÈÕ
|
||
* {hour}->ʱ
|
||
* {minute}->·Ö
|
||
* {second}->Ãë
|
||
* {maxOrderNumber}->µ±Ç°×î´óÐòºÅ
|
||
*
|
||
* **/
|
||
protected static synchronized String getSerialNumberByMonth(String serialNumberPattern,int numberCount,Map<String,String> model,String type,Integer queryYear,Integer queryMonth,JBOTransaction tx) throws Exception
|
||
{
|
||
String currentDateTime = DateAssistant.getTodayNow();
|
||
String currentYear = currentDateTime.substring(0,4);
|
||
String monthStr = currentDateTime.substring(5,7);
|
||
String day = currentDateTime.substring(8,10);
|
||
String hour = currentDateTime.substring(11,13);
|
||
String minute = currentDateTime.substring(14,16);
|
||
String second = currentDateTime.substring(17,19);
|
||
|
||
int year = Integer.parseInt(currentYear);
|
||
int month = Integer.parseInt(monthStr);
|
||
if(null != queryYear){
|
||
year = queryYear;
|
||
}
|
||
if(null != queryMonth){
|
||
month = queryMonth ;
|
||
}
|
||
Map<String,String> paramMap = new HashMap<String,String>();
|
||
paramMap.put("year", year+"");
|
||
paramMap.put("month", monthStr+"");
|
||
paramMap.put("day", day+"");
|
||
paramMap.put("hour", hour+"");
|
||
paramMap.put("minute", minute+"");
|
||
paramMap.put("second", second+"");
|
||
|
||
int maxOrderNumber = getMaxOrderNumberByMonth(type, year,month, tx);
|
||
StringBuffer numberFormat = new StringBuffer();
|
||
for(int i=0;i<numberCount;i++)
|
||
{
|
||
numberFormat.append("0");
|
||
}
|
||
|
||
DecimalFormat df = new DecimalFormat(numberFormat.toString());
|
||
String serialNumberFormat = df.format(maxOrderNumber);
|
||
paramMap.put("maxOrderNumber", serialNumberFormat);
|
||
if(null != model){
|
||
paramMap.putAll(model);
|
||
}
|
||
|
||
String serialNumberString = getSerialNumber(paramMap, serialNumberPattern);
|
||
|
||
return serialNumberString;
|
||
}
|
||
//¿¼ÂDz¢·¢Çé¿ö±ØÐë²ÉÓÃͬ²½»úÖÆ
|
||
@SuppressWarnings("unchecked")
|
||
protected static synchronized int getMaxOrderNumber(String type,Integer queryYear,JBOTransaction tx) throws Exception
|
||
{
|
||
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
|
||
BizObjectManager tNumberManager = JBOFactory.getBizObjectManager(T_SERIAL_NUMBER.CLASS_NAME);
|
||
tx.join(tNumberManager);
|
||
Map<String,String>searchCondtion=new HashMap<String,String>();
|
||
if(!StringX.isEmpty(type)){
|
||
searchCondtion.put("type_", type);
|
||
}
|
||
if(null != queryYear){
|
||
searchCondtion.put("year_", queryYear.toString());
|
||
|
||
}
|
||
String querySql = DataOperatorUtil.getQuerySql(searchCondtion);
|
||
BizObjectQuery bqDest = tNumberManager.createQuery(querySql);
|
||
for (String key : searchCondtion.keySet()) {
|
||
bqDest.setParameter(key, searchCondtion.get(key).toString());
|
||
}
|
||
BizObject serialNumber = null;
|
||
serialNumber = bqDest.getSingleResult(true);// Ä¿±êJBO£¬ÐèÒª×ö¸üвÙ×÷
|
||
|
||
|
||
if(null==serialNumber){
|
||
|
||
serialNumber = tNumberManager.newObject();
|
||
if(null != queryYear)
|
||
{
|
||
currentYear = queryYear;
|
||
}
|
||
serialNumber.setAttributeValue("year_",currentYear);
|
||
serialNumber.setAttributeValue("type_",type);
|
||
serialNumber.setAttributeValue("order_number_", "0");
|
||
}
|
||
int maxOrderNumber = Integer.valueOf(serialNumber.getAttribute("order_number_").getInt()) + 1;
|
||
serialNumber.setAttributeValue("order_number_",maxOrderNumber);
|
||
tNumberManager.saveObject(serialNumber);
|
||
return maxOrderNumber;
|
||
}
|
||
//¿¼ÂDz¢·¢Çé¿ö±ØÐë²ÉÓÃͬ²½»úÖÆ
|
||
@SuppressWarnings("unchecked")
|
||
protected static synchronized int getMaxOrderNumberByMonth(String type,Integer queryYear,Integer queryMonth,JBOTransaction tx) throws Exception
|
||
{
|
||
|
||
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
|
||
int currentMonth = Calendar.getInstance().get(Calendar.MONTH);
|
||
BizObjectManager tNumberManager = JBOFactory.getBizObjectManager(T_SERIAL_NUMBER.CLASS_NAME);
|
||
tx.join(tNumberManager);
|
||
Map<String,String>searchCondtion=new HashMap<String,String>();
|
||
if(!StringX.isEmpty(type)){
|
||
searchCondtion.put("type_", type);
|
||
}
|
||
if(null != queryYear){
|
||
searchCondtion.put("year_", queryYear.toString());
|
||
|
||
}
|
||
if(null != queryMonth){
|
||
searchCondtion.put("month_", queryMonth.toString());
|
||
|
||
}
|
||
String querySql = DataOperatorUtil.getQuerySql(searchCondtion);
|
||
BizObjectQuery bqDest = tNumberManager.createQuery(querySql);
|
||
for (String key : searchCondtion.keySet()) {
|
||
bqDest.setParameter(key, searchCondtion.get(key).toString());
|
||
}
|
||
BizObject serialNumber = null;
|
||
serialNumber = bqDest.getSingleResult(true);// Ä¿±êJBO£¬ÐèÒª×ö¸üвÙ×÷
|
||
|
||
|
||
if(null==serialNumber)
|
||
{
|
||
|
||
serialNumber = tNumberManager.newObject();
|
||
if(null != queryYear)
|
||
{
|
||
currentYear = queryYear;
|
||
}
|
||
if(null != queryMonth){
|
||
currentMonth = queryMonth;
|
||
}
|
||
serialNumber.setAttributeValue("year_",currentYear);
|
||
serialNumber.setAttributeValue("month_",currentMonth);
|
||
serialNumber.setAttributeValue("type_",type);
|
||
serialNumber.setAttributeValue("order_number_", "0");
|
||
}
|
||
int maxOrderNumber = Integer.valueOf(serialNumber.getAttribute("order_number_").getInt()) + 1;
|
||
serialNumber.setAttributeValue("order_number_",maxOrderNumber);
|
||
tNumberManager.saveObject(serialNumber);
|
||
return maxOrderNumber;
|
||
}
|
||
/**
|
||
* ÓÅÏÈ´ÓºÅÂë·ÏÆú³ØÖÐÈ¡ºÅ,Èç¹ûºÅÂë·ÏÆú³ØÖÐûÓдýÈ¡ºÅÂð,Ôò¸ù¾ÝÐòÁкÅÉú³É
|
||
* @param serialNumberPattern
|
||
* @param numberCount
|
||
* @param model
|
||
* @param type
|
||
* @param queryYear
|
||
* @param hibernateTemplate
|
||
* @param jdbcTemplate
|
||
* @return
|
||
* @throws Exception
|
||
*/
|
||
protected static synchronized String getSerialNumberFirstDiscard(String serialNumberPattern,int numberCount,Map<String,String> model,String type,Integer queryYear,JBOTransaction tx) throws Exception
|
||
{
|
||
String currentDateTime = DateAssistant.getTodayNow();
|
||
String currentYear = currentDateTime.substring(0,4);
|
||
String month = currentDateTime.substring(5,7);
|
||
String day = currentDateTime.substring(8,10);
|
||
String hour = currentDateTime.substring(11,13);
|
||
String minute = currentDateTime.substring(14,16);
|
||
String second = currentDateTime.substring(17,19);
|
||
|
||
int year = Integer.parseInt(currentYear);
|
||
if(null != queryYear){
|
||
year = queryYear;
|
||
}
|
||
Map<String,String> paramMap = new HashMap<String,String>();
|
||
paramMap.put("year", year+"");
|
||
paramMap.put("month", month+"");
|
||
paramMap.put("day", day+"");
|
||
paramMap.put("hour", hour+"");
|
||
paramMap.put("minute", minute+"");
|
||
paramMap.put("second", second+"");
|
||
|
||
int maxOrderNumber =0;
|
||
//´Ó·ÏÆú³Ø²éÕÒ¿ÉÓúÅÂë
|
||
maxOrderNumber=getMinDiscardNumber(type, queryYear, tx);
|
||
if(maxOrderNumber<0){//·ÏÆú³ØÖÐûÓÐÊý¾Ý
|
||
maxOrderNumber=getMaxOrderNumber(type, year, tx);
|
||
}
|
||
StringBuffer numberFormat = new StringBuffer();
|
||
for(int i=0;i<numberCount;i++)
|
||
{
|
||
numberFormat.append("0");
|
||
}
|
||
DecimalFormat df = new DecimalFormat(numberFormat.toString());
|
||
String serialNumberFormat = df.format(maxOrderNumber);
|
||
paramMap.put("maxOrderNumber", serialNumberFormat);
|
||
if(null != model){
|
||
paramMap.putAll(model);
|
||
}
|
||
|
||
String serialNumberString = getSerialNumber(paramMap, serialNumberPattern);
|
||
|
||
return serialNumberString;
|
||
}
|
||
@SuppressWarnings("unchecked")
|
||
protected static synchronized int getMinDiscardNumber(String type,Integer queryYear,JBOTransaction tx) throws Exception
|
||
{
|
||
BizObjectManager tNumberManager = JBOFactory.getBizObjectManager(T_SERIAL_DISCARD_NUMBER.CLASS_NAME);
|
||
tx.join(tNumberManager);
|
||
Map<String,String>searchCondtion=new HashMap<String,String>();
|
||
if(!StringX.isEmpty(type)){
|
||
searchCondtion.put("type_", type);
|
||
}
|
||
if(null != queryYear){
|
||
searchCondtion.put("year_", queryYear.toString());
|
||
|
||
}
|
||
|
||
String querySql = DataOperatorUtil.getQuerySql(searchCondtion);
|
||
BizObjectQuery bqDest = tNumberManager.createQuery(querySql);
|
||
for (String key : searchCondtion.keySet()) {
|
||
bqDest.setParameter(key, searchCondtion.get(key).toString());
|
||
}
|
||
BizObject serialNumber = null;
|
||
serialNumber = bqDest.getSingleResult(true);// Ä¿±êJBO£¬ÐèÒª×ö¸üвÙ×÷
|
||
|
||
if(null!=serialNumber)
|
||
{
|
||
int minOrderNumber = serialNumber.getAttribute("discard_number_").getInt();
|
||
tNumberManager.deleteObject(serialNumber);
|
||
return minOrderNumber;
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
} |