受理编号
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 org.apache.poi.util.IOUtils;
|
||||||
import weaver.common.DateUtil;
|
import weaver.common.DateUtil;
|
||||||
import weaver.conn.RecordSet;
|
import weaver.conn.RecordSet;
|
||||||
|
import weaver.conn.RecordSetTrans;
|
||||||
import weaver.docs.docs.*;
|
import weaver.docs.docs.*;
|
||||||
import weaver.file.ImageFileManager;
|
import weaver.file.ImageFileManager;
|
||||||
import weaver.formmode.IgnoreCaseHashMap;
|
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更新数据
|
* 根据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