受理编号

This commit is contained in:
dxfeng 2025-04-16 16:29:34 +08:00
parent 62aef79f0e
commit 75c8a0b561
7 changed files with 365 additions and 0 deletions

View File

@ -0,0 +1,12 @@
package com.api.secret.web;
import javax.ws.rs.Path;
/**
* @author:dxfeng
* @createTime: 2025/04/16
* @version: 1.0
*/
@Path("/secret/auto/number")
public class AutoGenerateNumberController extends com.engine.secret.web.AutoGenerateNumberController{
}

View File

@ -0,0 +1,24 @@
package com.engine.secret.entity.autonumber;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author:dxfeng
* @createTime: 2025/04/16
* @version: 1.0
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class AcceptanceNumber {
private Integer id;
private Integer year;
private Integer month;
private Integer monthlySerial;
private Integer globalSerial;
private Integer secretType;
}

View File

@ -0,0 +1,199 @@
package com.engine.secret.instance;
import cn.hutool.core.convert.Convert;
import com.engine.secret.entity.autonumber.AcceptanceNumber;
import com.engine.secret.exception.CustomizeRunTimeException;
import com.engine.secret.util.ModeUtil;
import weaver.conn.RecordSetTrans;
import weaver.formmode.IgnoreCaseHashMap;
import weaver.general.Util;
import java.time.LocalDate;
import java.util.Map;
import java.util.UUID;
/**
* @author:dxfeng
* @createTime: 2025/04/16
* @version: 1.0
*/
public class AutoGenerateNumberInstance {
private static final String TABLE_NAME = "uf_sldh";
private static AutoGenerateNumberInstance instance = new AutoGenerateNumberInstance();
private AutoGenerateNumberInstance() {
// 私有化构造方法
}
public static AutoGenerateNumberInstance getInstance() {
return instance;
}
public synchronized String getAcceptanceNumber(Map<String, Object> param) {
RecordSetTrans rs = new RecordSetTrans();
rs.setAutoCommit(false);
try {
Integer secretType = Convert.toInt(param.get("secretType"));
String requestId = Util.null2String(param.get("requestId"));
LocalDate now = LocalDate.now();
int year = now.getYear();
int currentMonth = now.getMonthValue();
AcceptanceNumber yearNumber;
rs.executeQuery("select * from uf_sldh where secret_type= ? and year = ? and month = 0 FOR UPDATE", secretType, year);
if (rs.next()) {
yearNumber = getSelectNum(rs);
} else {
yearNumber = buildNewNum(year, 0, secretType);
}
yearNumber.setGlobalSerial(yearNumber.getGlobalSerial() + 1);
// 更新年度流水号
saveNum(rs, yearNumber);
AcceptanceNumber monthNumber;
rs.executeQuery("select * from uf_sldh where secret_type= ? and year = ? and month = ? FOR UPDATE", secretType, year, currentMonth);
if (rs.next()) {
monthNumber = getSelectNum(rs);
} else {
monthNumber = buildNewNum(year, currentMonth, secretType);
}
monthNumber.setMonthlySerial(monthNumber.getMonthlySerial() + 1);
// 更新月度流水号
saveNum(rs, monthNumber);
// 生成编号
String formattedYear = String.format("%04d", year);
String formattedMonth = String.format("%02d", monthNumber.getMonth());
String formattedMonthlySerial = String.format("%02d", monthNumber.getMonthlySerial());
String formattedGlobalSerial = String.format("%03d", yearNumber.getGlobalSerial());
String num = formattedYear + formattedMonth + formattedMonthlySerial + formattedGlobalSerial;
rs.writeLog("requestId===" + requestId + ",secretType===" + secretType + ",num===" + num);
rs.commit();
return num;
} catch (Exception e) {
rs.rollback();
rs.writeLog(e);
throw new CustomizeRunTimeException(e.getMessage());
}
}
public synchronized String getWarIndustryAcceptanceNumber(Map<String, Object> param) {
RecordSetTrans rs = new RecordSetTrans();
rs.setAutoCommit(false);
try {
Integer secretType = Convert.toInt(param.get("secretType"));
String requestId = Util.null2String(param.get("requestId"));
LocalDate now = LocalDate.now();
int year = now.getYear();
AcceptanceNumber yearNumber;
rs.executeQuery("select * from uf_sldh where secret_type= ? and year = ? and month = 0 FOR UPDATE", secretType, year);
if (rs.next()) {
yearNumber = getSelectNum(rs);
} else {
yearNumber = buildNewNum(year, 0, secretType);
}
yearNumber.setGlobalSerial(yearNumber.getGlobalSerial() + 1);
// 更新年度流水号
saveNum(rs, yearNumber);
// 生成编号
String formattedYear = String.format("%04d", year);
String formattedGlobalSerial = String.format("%03d", yearNumber.getGlobalSerial());
String num = "JS" + formattedYear + formattedGlobalSerial;
rs.writeLog("requestId===" + requestId + ",secretType===" + secretType + ",num===" + num);
rs.commit();
return num;
} catch (Exception e) {
rs.rollback();
rs.writeLog(e);
throw new CustomizeRunTimeException(e.getMessage());
}
}
/**
* 构建查询对象
*
* @param rs
* @return
*/
private AcceptanceNumber getSelectNum(RecordSetTrans rs) {
return AcceptanceNumber.builder()
.id(rs.getInt("id"))
.year(rs.getInt("year"))
.month(rs.getInt("month"))
.monthlySerial(rs.getInt("monthly_serial"))
.globalSerial(rs.getInt("global_serial"))
.secretType(rs.getInt("secret_type"))
.build();
}
/**
* 构建新对象
*
* @param year
* @param currentMonth
* @param secretType
* @return
*/
private AcceptanceNumber buildNewNum(Integer year, Integer currentMonth, Integer secretType) {
return AcceptanceNumber.builder()
.year(year)
.month(currentMonth)
.monthlySerial(0)
.globalSerial(0)
.secretType(secretType)
.build();
}
/**
* 保存编号数据
*
* @param rs
* @param number
* @throws Exception
*/
private void saveNum(RecordSetTrans rs, AcceptanceNumber number) throws Exception {
if (null == number.getId()) {
Map<String, Object> insertMap = buildSaveMap(number);
String uuid = UUID.randomUUID().toString();
insertMap.put("modeuuid", uuid);
int formModeId = ModeUtil.getModeIdByTableName(TABLE_NAME);
insertMap.put("formmodeid", formModeId);
ModeUtil.buildModeInsertFields(insertMap, 1);
ModeUtil.insertData(rs, insertMap, TABLE_NAME);
ModeUtil.refreshRight(uuid, TABLE_NAME, formModeId, 1);
} else {
Map<String, Object> updateMap = buildSaveMap(number);
ModeUtil.buildModeUpdateFields(updateMap, 1);
ModeUtil.updateDataById(rs, updateMap, TABLE_NAME);
}
}
/**
* 构建数据库映射关系
*
* @param number
* @return
*/
private IgnoreCaseHashMap<String, Object> buildSaveMap(AcceptanceNumber number) {
IgnoreCaseHashMap<String, Object> dataMap = new IgnoreCaseHashMap<>();
if (null != number.getId()) {
dataMap.put("id", number.getId());
}
dataMap.put("year", number.getYear());
dataMap.put("month", number.getMonth());
dataMap.put("monthly_serial", number.getMonthlySerial());
dataMap.put("global_serial", number.getGlobalSerial());
dataMap.put("secret_type", number.getSecretType());
return dataMap;
}
}

View File

@ -0,0 +1,18 @@
package com.engine.secret.service;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/04/16
* @version: 1.0
*/
public interface AutoGenerateNumberService {
/**
* 获取受理单号
*
* @param param
* @return
*/
String getAcceptanceNumber(Map<String, Object> param) ;
}

View File

@ -0,0 +1,33 @@
package com.engine.secret.service.impl;
import cn.hutool.core.convert.Convert;
import com.engine.core.impl.Service;
import com.engine.secret.exception.CustomizeRunTimeException;
import com.engine.secret.instance.AutoGenerateNumberInstance;
import com.engine.secret.service.AutoGenerateNumberService;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/04/16
* @version: 1.0
*/
public class AutoGenerateNumberServiceImpl extends Service implements AutoGenerateNumberService {
@Override
public String getAcceptanceNumber(Map<String, Object> param) {
Integer secretType = Convert.toInt(param.get("secretType"));
if (null == secretType) {
throw new CustomizeRunTimeException("未获取到[保密资质(资格)类型],请检查表单数据");
}
AutoGenerateNumberInstance instance = AutoGenerateNumberInstance.getInstance();
if (0 == secretType || 1 == secretType) {
// 集成印制
return instance.getAcceptanceNumber(param);
} else {
// 军工
return instance.getWarIndustryAcceptanceNumber(param);
}
}
}

View File

@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.IOUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.conn.RecordSetTrans;
import weaver.docs.docs.*;
import weaver.file.ImageFileManager;
import weaver.formmode.IgnoreCaseHashMap;
@ -179,6 +180,25 @@ public class ModeUtil {
}
}
public static void insertData(RecordSetTrans rs,Map<String, Object> dataMap, String tableName) throws Exception {
List<String> fieldList = new ArrayList<>();
List<String> dataList = new ArrayList<>();
List<String> paramList = new ArrayList<>();
dataMap.forEach((key, value) -> {
if (null != value) {
String valueStr = String.valueOf(value);
if (StringUtils.isNotBlank(valueStr)) {
fieldList.add(key);
dataList.add(valueStr);
paramList.add("?");
}
}
});
String insertSql = " insert into " + tableName + "(" + StringUtils.join(fieldList, ",") + ") values (" + StringUtils.join(paramList, ",") + ")";
rs.executeUpdate(insertSql, dataList);
}
/**
* 根据ID更新数据
*
@ -204,6 +224,27 @@ public class ModeUtil {
}
}
/**
* 根据ID更新数据
*
* @param dataMap
* @param tableName
*/
public static void updateDataById(RecordSetTrans rs,Map<String, Object> dataMap, String tableName) throws Exception {
List<String> fieldList = new ArrayList<>();
List<Object> dataList = new ArrayList<>();
String id = Util.null2String(dataMap.get("id"));
dataMap.remove("id");
dataMap.forEach((key, value) -> {
fieldList.add(key + " = ? ");
dataList.add(value);
});
dataList.add(id);
String updateSql = "update " + tableName + " set " + StringUtils.join(fieldList, ",") + " where id = ? ";
rs.executeUpdate(updateSql, dataList);
}
/**
* 更新数据
*

View File

@ -0,0 +1,38 @@
package com.engine.secret.web;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.secret.service.AutoGenerateNumberService;
import com.engine.secret.service.impl.AutoGenerateNumberServiceImpl;
import com.engine.secret.util.ResponseResult;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/04/16
* @version: 1.0
*/
public class AutoGenerateNumberController {
public AutoGenerateNumberService getService(User user) {
return ServiceUtil.getService(AutoGenerateNumberServiceImpl.class, user);
}
@GET
@Path("/getAcceptanceNumber")
@Produces(MediaType.APPLICATION_JSON)
public String getAcceptanceNumber(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> param = ParamUtil.request2Map(request);
return new ResponseResult<Map<String, Object>, String>(user).run(getService(user)::getAcceptanceNumber, param);
}
}