受理编号
This commit is contained in:
parent
62aef79f0e
commit
75c8a0b561
|
|
@ -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{
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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) ;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新数据
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue