获取序列号工具类修改

This commit is contained in:
yjf 2022-04-01 09:11:55 +08:00
parent 99ad21922a
commit 0480aef548
3 changed files with 94 additions and 394 deletions

View File

@ -1,418 +1,114 @@
package com.tenwa.flow.util;
import java.text.DecimalFormat;
import com.amarsoft.app.lc.util.DateAssistant;
import com.amarsoft.are.jbo.*;
import com.amarsoft.are.lang.StringX;
import com.google.common.collect.ImmutableMap;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import jbo.com.tenwa.entity.comm.flow.FLOW_WORK_FLAG;
import jbo.com.tenwa.entity.comm.serialutil.T_SERIAL_NUMBER;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import com.google.common.collect.ImmutableMap;
import jbo.com.tenwa.entity.comm.flow.FLOW_BUSSINESS_OBJECT;
import jbo.com.tenwa.entity.comm.flow.FLOW_WORK_FLAG;
import jbo.com.tenwa.entity.comm.serialutil.T_SERIAL_DISCARD_NUMBER;
import jbo.com.tenwa.entity.comm.serialutil.T_SERIAL_NUMBER;
import jbo.sys.FLOW_OBJECT;
import com.amarsoft.app.lc.util.DateAssistant;
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.amarsoft.awe.Configure;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import java.util.Objects;
public class FlowUtil {
public static synchronized String getProjectSerialNumber(String orgId,JBOTransaction tx) throws Exception{
return FlowUtil.getSerialNumber("P{year}{month}{day}{maxOrderNumber}",6,null, "项目编号"+orgId, null, tx);
}
public static synchronized String getEbankSerialNumber(String orgId,JBOTransaction tx) throws Exception{
return FlowUtil.getSerialNumber("E-{year}{month}{maxOrderNumber}",3,null, "网银编号"+orgId, null, tx);
}
public static synchronized String getOutNoNumber(JBOTransaction tx) throws Exception{
return FlowUtil.getSerialNumber("PF{year}{month}{maxOrderNumber}",4,null, "", null, tx);
}
public static synchronized String getRentOutNoNumber(JBOTransaction tx) throws Exception{
return FlowUtil.getSerialNumber("PR{year}{month}{maxOrderNumber}",4,null, "", null, tx);
}
//获取1位的凭证号凭证号--123
public static synchronized String getVoucher_Number(JBOTransaction tx) throws Exception{
return String.valueOf(Integer.parseInt(FlowUtil.getSerialNumber("{maxOrderNumber}",6,null, "凭证号", Integer.parseInt("2018"), tx)));
public static String getVoucher_Number(JBOTransaction tx) throws Exception {
return FlowUtil.getSerialNumber("{maxOrderNumber}", 6, null, "凭证号", 2018, tx);
}
//获取1位的客户编号--123
public static synchronized String getCustomer_Number(boolean isCompany ,String custType) throws Exception {
//获取客户编号(法人自然人)
public static String getCustomer_Number(boolean isCompany, String custType) throws Exception {
ImmutableMap<String, String> model = ImmutableMap.of("custType", custType);
return FlowUtil.getSerialNumber("APZL{custType}{maxOrderNumber}", 15, model, isCompany ? "法人客户编号" : "客户编号", null, null);
}
//获取经销商编号
public static String getDistributorSerialNumber(JBOTransaction tx) throws Exception {
return FlowUtil.getSerialNumber("DSTB{year}{month}{day}{maxOrderNumber}",6,null, "经销商编号", null, tx);
}
private static 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 = queryYear != null ? queryYear : Integer.valueOf(currentYear);
Map<String, String> paramMap = new HashMap<>();
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);
paramMap.put("maxOrderNumber", String.format("%0" + numberCount + "d", maxOrderNumber));
if(null != model){
paramMap.putAll(model);
}
for (String key : paramMap.keySet()) {
if (serialNumberPattern.indexOf("{" + key + "}") >= 0) {
serialNumberPattern = serialNumberPattern.replace("{" + key + "}", paramMap.get(key));
}
}
return serialNumberPattern;
}
//考虑并发情况必须采用同步机制
private static synchronized int getMaxOrderNumber(String type, Integer queryYear) throws Exception {
JBOTransaction tx = null;
try {
tx = JBOFactory.createJBOTransaction();
ImmutableMap<String, String> model = ImmutableMap.of("custType", custType);
String serial = FlowUtil.getSerialNumber("APZL{custType}{maxOrderNumber}", 15, model, isCompany?"法人客户编号":"客户编号", null, tx);
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());
}
// 目标JBO需要做更新操作
BizObject serialNumber = bqDest.getSingleResult(true);
if (Objects.isNull(serialNumber)) {
serialNumber = tNumberManager.newObject();
serialNumber.setAttributeValue("year_", queryYear != null ? queryYear : currentYear);
serialNumber.setAttributeValue("type_", type);
serialNumber.setAttributeValue("order_number_", "0");
}
int maxOrderNumber = serialNumber.getAttribute("order_number_").getInt() + 1;
serialNumber.setAttributeValue("order_number_", maxOrderNumber);
tNumberManager.saveObject(serialNumber);
tx.commit();
return serial;
return maxOrderNumber;
} catch (Exception e) {
if (tx != null) tx.rollback();
throw e;
}
}
//获取经销商编号
public static synchronized String getDistributorSerialNumber(JBOTransaction tx) throws Exception{
return FlowUtil.getSerialNumber("DSTB{year}{month}{day}{maxOrderNumber}",6,null, "经销商编号", null, tx);
public static void deleteWorkFlowConflict(String flowUnid, JBOTransaction tx) throws Exception {
Map<String, String> condtion = new HashMap<String, String>();
condtion.put("flow_unid", flowUnid);
DataOperatorUtil.deleteJBOByCondtion(FLOW_WORK_FLAG.CLASS_NAME, condtion, 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;
}
//考虑并发情况必须采用同步机制
@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));
}
BizObject serialNumber = null;
serialNumber = bqDest.getSingleResult();// 目标JBO需要做更新操作
if(null==serialNumber){
serialNumber = tNumberManager.newObject();
if (null != queryYear) {
currentYear = queryYear;
}
serialNumber.setAttributeValue("year_",currentYear);
serialNumber.setAttributeValue("type_",type);
serialNumber.setAttributeValue("order_number_", "1");
tNumberManager.saveObject(serialNumber);
} else {
Transaction sqlCa = Transaction.createTransaction(tx);
SqlObject sqlObject = new SqlObject("update T_SERIAL_NUMBER set order_number_ = order_number_+1 where " + querySql);
for (String key : searchCondtion.keySet()) {
sqlObject.setParameter(key, searchCondtion.get(key));
}
sqlCa.executeSQL(sqlObject);
serialNumber = bqDest.getSingleResult();
}
return serialNumber.getAttribute("order_number_").getInt();
}
//考虑并发情况必须采用同步机制
@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;
}
public static void deleteWorkFlowConflict(String flowUnid,JBOTransaction tx) throws Exception{
Map<String,String> condtion=new HashMap<String, String>();
condtion.put("flow_unid", flowUnid);
DataOperatorUtil.deleteJBOByCondtion(FLOW_WORK_FLAG.CLASS_NAME, condtion, tx);
}
public static String checkWorkFlowConflict(String flowUnid,String flowname,String flowkey,JBOTransaction tx)throws Exception{
String sql="SELECT flow_unid,flow_name FROM flow_work_flag WHERE flow_name IN("
+ "SELECT flow_nameb FROM flow_mutex_config "
+ "WHERE flow_namea=:flow_namea ) AND mutex_key=:mutex_key";
ASResultSet rs = null;
String flow_unid=null;
String flow_name=null;
String username=null;
String res="";
try {
Map<String,String>searchCondtion=new HashMap<String,String>();
Configure CurConfig = Configure.getInstance();
String sDataSource = CurConfig.getDataSource();
Transaction Sqlca = Transaction.createTransaction(sDataSource);
SqlObject so = new SqlObject(sql);
so.setParameter("flow_namea",flowname);
so.setParameter("mutex_key",flowkey);
rs = Sqlca.getASResultSet(so);
while(rs.next()){
flow_unid=rs.getString("flow_unid");
flow_name=rs.getString("flow_name");
searchCondtion.clear();
searchCondtion.put("objectno", flow_unid);
BizObject flowobject=DataOperatorUtil.getSingleJBO(FLOW_OBJECT.CLASS_NAME, searchCondtion, tx);
if(res!=""){
res+=",";
}
res+=flow_name+"[用户名:"+flowobject.getAttribute("username").getString()+"]";
}
} catch (Exception e) {
e.printStackTrace();
}finally{
rs.close();
}
if(res.length()>0){
//删除表数据
Map<String,String>condtion=new HashMap<String,String>();
condtion.put("flow_unid", flowUnid);
DataOperatorUtil.deleteJBOByCondtion(FLOW_BUSSINESS_OBJECT.CLASS_NAME, condtion, tx);
return "当前流程和"+res+"互斥,如有疑惑请联系管理员";
}else{
/*BizObjectManager bom=JBOFactory.getBizObjectManager(FLOW_BUSSINESS_OBJECT.CLASS_NAME);
tx.join(bom);
BizObject bo=bom.newObject();
bo.setAttributeValue("flow_unid", flowUnid);
bo.setAttributeValue("flow_name", flowname);
bo.setAttributeValue("flow_key", flowkey);
bom.saveObject(bo);*/
return null;
}
}
}

View File

@ -57,7 +57,7 @@ public class SelectBalance {
return "ERROR@剩余额度不足";
}
}
return "ERROR@网络异常……";
return "ERROR@经销商没有保证金";
}
}

View File

@ -93,8 +93,12 @@ public class AutoFiveGradeClassification implements Job {
//更新合同状态为100105 分类状态
sqlca.executeSQL("update LC_CALC_CONDITION_STATUS LCCS join lb_contract_info lci on LCCS.CONTRACT_ID = lci.ID set LCCS.FIVE_GRADE='ClassifyResult01',LCCS.FIVE_GRADE_DATE= date_format(curdate(),'%Y/%m/%d'),LCCS.FIVE_GRADE_DEMO=concat(date_format(curdate(),'%Y/%m/%d'),'日自动跑批') where lci.CONTRACT_STATUS in ('100','105') and LCCS.FIVE_GRADE <> 'ClassifyResult01'");
//更新合同状态为31分类状态
//更新合同状态为31分类状态逾期
sqlca.executeSQL("{call proc_autoFiveClassify()}");
//更新合同状态为31分类状态未逾期,刚起租 2022/03/15
sqlca.executeSQL("{call proc_autoFiveClassify_normal()}");
sqlca.commit();
List<BizObject> diList = JBOFactory.getBizObjectManager(DISTRIBUTOR_INFO.CLASS_NAME).createQuery("1=1").getResultList(false);
for (BizObject bo : diList) {